From 7afa845edc09d2818af5fe67a0eb45ec579d1260 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sat, 1 Sep 2007 09:25:27 +0200 Subject: [PATCH] rebase -m: Fix incorrect short-logs of already applied commits. 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 Signed-off-by: Junio C Hamano --- git-rebase.sh | 13 ++++++++----- t/t3406-rebase-message.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) create mode 100755 t/t3406-rebase-message.sh diff --git a/git-rebase.sh b/git-rebase.sh index cbafa14ed5..9cf005677c 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -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 index 0000000000..332b2b2feb --- /dev/null +++ b/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 -- 2.11.4.GIT