Skip to content

Commit

Permalink
rebase -m: Fix incorrect short-logs of already applied commits.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Sixt authored and gitster committed Sep 1, 2007
1 parent aecbf91 commit 7afa845
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 5 deletions.
13 changes: 8 additions & 5 deletions git-rebase.sh
Expand Up @@ -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
Expand Down
44 changes: 44 additions & 0 deletions t/t3406-rebase-message.sh
@@ -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

0 comments on commit 7afa845

Please sign in to comment.