rebase-i: do not get fooled by a log message ending with backslash

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 2010-07-05 23:08:36 -07:00
parent 41f556b947
commit 57f2b6b258
2 changed files with 23 additions and 5 deletions

View File

@ -450,7 +450,7 @@ record_in_rewritten() {


do_next () { do_next () {
rm -f "$MSG" "$AUTHOR_SCRIPT" "$AMEND" || exit rm -f "$MSG" "$AUTHOR_SCRIPT" "$AMEND" || exit
read command sha1 rest < "$TODO" read -r command sha1 rest < "$TODO"
case "$command" in case "$command" in
'#'*|''|noop) '#'*|''|noop)
mark_action_done mark_action_done
@ -591,7 +591,7 @@ do_rest () {
# skip picking commits whose parents are unchanged # skip picking commits whose parents are unchanged
skip_unnecessary_picks () { skip_unnecessary_picks () {
fd=3 fd=3
while read command sha1 rest while read -r command sha1 rest
do do
# fd=3 means we skip the command # fd=3 means we skip the command
case "$fd,$command,$(git rev-parse --verify --quiet $sha1^)" in case "$fd,$command,$(git rev-parse --verify --quiet $sha1^)" in
@ -644,13 +644,13 @@ rearrange_squash () {
test -s "$1.sq" || return test -s "$1.sq" || return


used= used=
while read pick sha1 message while read -r pick sha1 message
do do
case " $used" in case " $used" in
*" $sha1 "*) continue ;; *" $sha1 "*) continue ;;
esac esac
echo "$pick $sha1 $message" echo "$pick $sha1 $message"
while read squash action msg while read -r squash action msg
do do
case "$message" in case "$message" in
"$msg"*) "$msg"*)
@ -891,7 +891,7 @@ first and then run 'git rebase --continue' again."
--abbrev=7 --reverse --left-right --topo-order \ --abbrev=7 --reverse --left-right --topo-order \
$REVISIONS | \ $REVISIONS | \
sed -n "s/^>//p" | sed -n "s/^>//p" |
while read shortsha1 rest while read -r shortsha1 rest
do do
if test t != "$PRESERVE_MERGES" if test t != "$PRESERVE_MERGES"
then then

View File

@ -630,4 +630,22 @@ test_expect_success 'always cherry-pick with --no-ff' '
test_cmp empty out test_cmp empty out
' '


test_expect_success 'set up commits with funny messages' '
git checkout -b funny A &&
echo >>file1 &&
test_tick &&
git commit -a -m "end with slash\\" &&
echo >>file1 &&
test_tick &&
git commit -a -m "another commit"
'

test_expect_success 'rebase-i history with funny messages' '
git rev-list A..funny >expect &&
test_tick &&
FAKE_LINES="1 2" git rebase -i A &&
git rev-list A.. >actual &&
test_cmp expect actual
'

test_done test_done