When rev-list's --cherry option does not detect that a patch has already
been applied upstream, an interactive rebase would offer to reapply it and
consequently stop at that patch with a failure, mentioning that the diff
is empty.

Traditionally, a `git rebase --continue` simply skips the commit in such a
situation.

However, as pointed out by Gábor Szeder, this leaves a CHERRY_PICK_HEAD
behind, making the Git prompt believe that a cherry pick is still going
on. This commit adds a test case demonstrating this bug.

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 t/t3404-rebase-interactive.sh | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index ac429a0..6fe6c47 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -1102,4 +1102,25 @@ test_expect_success 'rebase -i commits that overwrite 
untracked files (no ff)' '
        test $(git cat-file commit HEAD | sed -ne \$p) = I
 '
 
+test_expect_failure 'rebase --continue removes CHERRY_PICK_HEAD' '
+       git checkout -b commit-to-skip &&
+       for double in X 3 1
+       do
+               seq 5 | sed "s/$double/&&/" >seq &&
+               git add seq &&
+               test_tick &&
+               git commit -m seq-$double
+       done &&
+       git tag seq-onto &&
+       git reset --hard HEAD~2 &&
+       git cherry-pick seq-onto &&
+       set_fake_editor &&
+       FAKE_LINES= test_must_fail git rebase -i seq-onto &&
+       test -d .git/rebase-merge &&
+       git rebase --continue &&
+       git diff --exit-code seq-onto &&
+       test ! -d .git/rebase-merge &&
+       test ! -f .git/CHERRY_PICK_HEAD
+'
+
 test_done
-- 
2.3.1.windows.1.9.g8c01ab4



--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to