add tests for rebasing with patch-equivalence present
authorMartin von Zweigbergk <martinvonz@gmail.com>
Fri, 7 Jun 2013 06:11:38 +0000 (23:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2013 16:41:11 +0000 (09:41 -0700)
Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-rebase.sh
t/t3421-rebase-topology-linear.sh
index 1e0ff285a625b3eec2a054f34c41aaab9dd59754..4b74ae460b8943c176b6563d374e1663f89a1d7b 100644 (file)
@@ -81,3 +81,20 @@ reset_rebase () {
        git reset --hard &&
        git clean -f
 }
+
+cherry_pick () {
+       git cherry-pick -n "$2" &&
+       git commit -m "$1" &&
+       git tag "$1"
+}
+
+revert () {
+       git revert -n "$2" &&
+       git commit -m "$1" &&
+       git tag "$1"
+}
+
+make_empty () {
+       git commit --allow-empty -m "$1" &&
+       git tag "$1"
+}
index 60365d1238ec727c4954c880479bda41ed0ec086..ddcbfc67246c886d6efba0c35bd4bcfe044e2006 100755 (executable)
@@ -75,4 +75,89 @@ test_run_rebase success -m
 test_run_rebase success -i
 test_run_rebase success -p
 
+#       f
+#      /
+# a---b---c---g---h
+#      \
+#       d---G---i
+#
+# uppercase = cherry-picked
+# h = reverted g
+#
+# Reverted patches are there for tests to be able to check if a commit
+# that introduced the same change as another commit is
+# dropped. Without reverted commits, we could get false positives
+# because applying the patch succeeds, but simply results in no
+# changes.
+test_expect_success 'setup of linear history for range selection tests' '
+       git checkout c &&
+       test_commit g &&
+       revert h g &&
+       git checkout d &&
+       cherry_pick G g &&
+       test_commit i &&
+       git checkout b &&
+       test_commit f
+'
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* drops patches in upstream" "
+               reset_rebase &&
+               git rebase $* h i &&
+               test_cmp_rev h HEAD~2 &&
+               test_linear_range 'd i' h..
+       "
+}
+test_run_rebase success ''
+test_run_rebase failure -m
+test_run_rebase success -i
+test_run_rebase success -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* can drop last patch if in upstream" "
+               reset_rebase &&
+               git rebase $* h G &&
+               test_cmp_rev h HEAD^ &&
+               test_linear_range 'd' h..
+       "
+}
+test_run_rebase success ''
+test_run_rebase failure -m
+test_run_rebase success -i
+test_run_rebase success -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* --onto drops patches in upstream" "
+               reset_rebase &&
+               git rebase $* --onto f h i &&
+               test_cmp_rev f HEAD~2 &&
+               test_linear_range 'd i' f..
+       "
+}
+test_run_rebase success ''
+test_run_rebase failure -m
+test_run_rebase success -i
+test_run_rebase success -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* --onto does not drop patches in onto" "
+               reset_rebase &&
+               git rebase $* --onto h f i &&
+               test_cmp_rev h HEAD~3 &&
+               test_linear_range 'd G i' h..
+       "
+}
+test_run_rebase success ''
+test_run_rebase success -m
+test_run_rebase success -i
+test_run_rebase success -p
+
 test_done