Code

rebase -i: ignore patches that are already in the upstream
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Wed, 1 Aug 2007 14:59:35 +0000 (15:59 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Aug 2007 00:56:28 +0000 (17:56 -0700)
Non-interactive rebase had this from the beginning -- match it by
using --cherry-pick option to rev-list.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh
t/t3404-rebase-interactive.sh

index 061cd0a69e22a51a73488b89ffb99a934fd58ce1..d3addd4290cc202b8c5d0e41d4aa7acd4d2ac0a4 100755 (executable)
@@ -463,8 +463,9 @@ do
 #
 EOF
                git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \
-                       --abbrev=7 --reverse $UPSTREAM..$HEAD | \
-                       sed "s/^/pick /" >> "$TODO"
+                       --abbrev=7 --reverse --left-right --cherry-pick \
+                       $UPSTREAM...$HEAD | \
+                       sed -n "s/^>/pick /p" >> "$TODO"
 
                test -z "$(grep -ve '^$' -e '^#' < $TODO)" &&
                        die_abort "Nothing to do"
index 817f614cde29f12e01724901e1f0b966a28d04b3..dc436d768e20f368fb4f517a2ba528e6da8f27a5 100755 (executable)
@@ -68,6 +68,9 @@ test "\$1" = .git/COMMIT_EDITMSG && {
        test -z "\$FAKE_COMMIT_AMEND" || echo "\$FAKE_COMMIT_AMEND" >> "\$1"
        exit
 }
+test -z "\$EXPECT_COUNT" ||
+       test "\$EXPECT_COUNT" = \$(grep -ve "^#" -e "^$" < "\$1" | wc -l) ||
+       exit
 test -z "\$FAKE_LINES" && exit
 grep -v "^#" < "\$1" > "\$1".tmp
 rm "\$1"
@@ -251,4 +254,16 @@ test_expect_success 'interrupted squash works as expected' '
        test $one = $(git rev-parse HEAD~2)
 '
 
+test_expect_success 'ignore patch if in upstream' '
+       HEAD=$(git rev-parse HEAD) &&
+       git checkout -b has-cherry-picked HEAD^ &&
+       echo unrelated > file7 &&
+       git add file7 &&
+       test_tick &&
+       git commit -m "unrelated change" &&
+       git cherry-pick $HEAD &&
+       EXPECT_COUNT=1 git rebase -i $HEAD &&
+       test $HEAD = $(git rev-parse HEAD^)
+'
+
 test_done