Skip to content

Commit 89b0230

Browse files
moygitster
authored andcommitted
die_with_status: use "printf '%s\n'", not "echo"
Some implementations of 'echo' (e.g. dash's built-in) interpret backslash sequences in their arguments. This triggered at least one bug: the error message of "rebase -i" was turning \t in commit messages into actual tabulations. There may be others. Using "printf '%s\n'" instead avoids this bad behavior, and is the form used by the "say" function. Noticed-by: David Kastrup <[email protected]> Signed-off-by: Matthieu Moy <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fb56570 commit 89b0230

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

git-sh-setup.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ die () {
5353
die_with_status () {
5454
status=$1
5555
shift
56-
echo >&2 "$*"
56+
printf >&2 '%s\n' "$*"
5757
exit "$status"
5858
}
5959

t/t3404-rebase-interactive.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,4 +976,17 @@ test_expect_success 'rebase -i with --strategy and -X' '
976976
test $(cat file1) = Z
977977
'
978978

979+
test_expect_success 'rebase -i error on commits with \ in message' '
980+
current_head=$(git rev-parse HEAD)
981+
test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" &&
982+
test_commit TO-REMOVE will-conflict old-content &&
983+
test_commit "\temp" will-conflict new-content dummy &&
984+
(
985+
EDITOR=true &&
986+
export EDITOR &&
987+
test_must_fail git rebase -i HEAD^ --onto HEAD^^ 2>error
988+
) &&
989+
test_expect_code 1 grep " emp" error
990+
'
991+
979992
test_done

0 commit comments

Comments
 (0)