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 <dak@gnu.org> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Matthieu Moy committed Aug 7, 2013 at 11:26 UTC 89b0230a20e435c02effafd3de16bb105d652505
2 files changed +14 -1
git-sh-setup.sh
+1 -1
@@ -53,7 +53,7 @@ die () {
53 die_with_status () {
54 status=$1
55 shift
56 - echo >&2 "$*"
56 + printf >&2 '%s\n' "$*"
57 exit "$status"
58 }
59
t/t3404-rebase-interactive.sh
+13
@@ -976,4 +976,17 @@ test_expect_success 'rebase -i with --strategy and -X' '
976 test $(cat file1) = Z
977 '
978
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 +
992 test_done