add tests for rebasing with patch-equivalence present
[gitweb.git] / t / t3421-rebase-topology-linear.sh
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