rebase -m: Fix incorrect short-logs of already applied commits.
authorJohannes Sixt <johannes.sixt@telecom.at>
Sat, 1 Sep 2007 07:25:27 +0000 (09:25 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sat, 1 Sep 2007 09:23:05 +0000 (02:23 -0700)
When a topic branch is rebased, some of whose commits are already
cherry-picked upstream:

    o--X--A--B--Y    <- master
     \
      A--B--Z        <- topic

then 'git rebase -m master' would report:

    Already applied: 0001 Y
    Already applied: 0002 Y

With this fix it reports the expected:

    Already applied: 0001 A
    Already applied: 0002 B

As an added bonus, this change also avoids 'echo' of a commit message,
which might contain escapements.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase.sh
t/t3406-rebase-message.sh [new file with mode: 0755]

index cbafa14ed524212441ba76e1bdb558585795e2f3..9cf005677c2936a7c2f14a00cc4e91670e2259f3 100755 (executable)
@@ -59,20 +59,23 @@ continue_merge () {
                die "$RESOLVEMSG"
        fi
 
+       cmt=`cat $dotest/current`
        if ! git diff-index --quiet HEAD
        then
-               if ! git-commit -C "`cat $dotest/current`"
+               if ! git-commit -C "$cmt"
                then
                        echo "Commit failed, please do not call \"git commit\""
                        echo "directly, but instead do one of the following: "
                        die "$RESOLVEMSG"
                fi
-               printf "Committed: %0${prec}d" $msgnum
+               printf "Committed: %0${prec}d " $msgnum
+               git rev-list --pretty=oneline -1 HEAD | \
+                       sed 's/^[a-f0-9]\+ //'
        else
-               printf "Already applied: %0${prec}d" $msgnum
+               printf "Already applied: %0${prec}d " $msgnum
+               git rev-list --pretty=oneline -1 "$cmt" | \
+                       sed 's/^[a-f0-9]\+ //'
        fi
-       echo ' '`git rev-list --pretty=oneline -1 HEAD | \
-                               sed 's/^[a-f0-9]\+ //'`
 
        prev_head=`git rev-parse HEAD^0`
        # save the resulting commit so we can read-tree on it later
diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
new file mode 100755 (executable)
index 0000000..332b2b2
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+test_description='messages from rebase operation'
+
+. ./test-lib.sh
+
+quick_one () {
+       echo "$1" >"file$1" &&
+       git add "file$1" &&
+       test_tick &&
+       git commit -m "$1"
+}
+
+test_expect_success setup '
+       quick_one O &&
+       git branch topic &&
+       quick_one X &&
+       quick_one A &&
+       quick_one B &&
+       quick_one Y &&
+
+       git checkout topic &&
+       quick_one A &&
+       quick_one B &&
+       quick_one Z
+
+'
+
+cat >expect <<\EOF
+Already applied: 0001 A
+Already applied: 0002 B
+Committed: 0003 Z
+EOF
+
+test_expect_success 'rebase -m' '
+
+       git rebase -m master >report &&
+       sed -n -e "/^Already applied: /p" \
+               -e "/^Committed: /p" report >actual &&
+       diff -u expect actual
+
+'
+
+test_done