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