add tests for rebasing root
authorMartin von Zweigbergk <martinvonz@gmail.com>
Fri, 7 Jun 2013 06:11:40 +0000 (23:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2013 16:41:53 +0000 (09:41 -0700)
Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3421-rebase-topology-linear.sh
index f19f0d0346ded015b06e8078db0a9a11c1e751f5..e67add6909cd92707499d64da40e6b934999efd0 100755 (executable)
@@ -218,4 +218,133 @@ test_run_rebase failure -m
 test_run_rebase failure -i
 test_run_rebase failure -p
 
+#       m
+#      /
+# a---b---c---g
+#
+# x---y---B
+#
+# uppercase = cherry-picked
+# m = reverted b
+#
+# 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 test involving root' '
+       git checkout b &&
+       revert m b &&
+       git checkout --orphan disjoint &&
+       git rm -rf . &&
+       test_commit x &&
+       test_commit y &&
+       cherry_pick B b
+'
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* --onto --root" "
+               reset_rebase &&
+               git rebase $* --onto c --root y &&
+               test_cmp_rev c HEAD~2 &&
+               test_linear_range 'x y' c..
+       "
+}
+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 $* without --onto --root with disjoint history" "
+               reset_rebase &&
+               git rebase $* c y &&
+               test_cmp_rev c HEAD~2 &&
+               test_linear_range 'x y' c..
+       "
+}
+test_run_rebase success ''
+test_run_rebase failure -m
+test_run_rebase success -i
+test_run_rebase failure -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* --onto --root drops patch in onto" "
+               reset_rebase &&
+               git rebase $* --onto m --root B &&
+               test_cmp_rev m HEAD~2 &&
+               test_linear_range 'x y' m..
+       "
+}
+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 --root with merge-base does not go to root" "
+               reset_rebase &&
+               git rebase $* --onto m --root g &&
+               test_cmp_rev m HEAD~2 &&
+               test_linear_range 'c g' m..
+       "
+}
+
+test_run_rebase success ''
+test_run_rebase success -m
+test_run_rebase success -i
+test_run_rebase failure -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* without --onto --root with disjoint history drops patch in onto" "
+               reset_rebase &&
+               git rebase $* m B &&
+               test_cmp_rev m HEAD~2 &&
+               test_linear_range 'x y' m..
+       "
+}
+test_run_rebase success ''
+test_run_rebase failure -m
+test_run_rebase success -i
+test_run_rebase failure -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* --root on linear history is a no-op" "
+               reset_rebase &&
+               git rebase $* --root c &&
+               test_cmp_rev c HEAD
+       "
+}
+test_run_rebase failure ''
+test_run_rebase failure -m
+test_run_rebase failure -i
+test_run_rebase failure -p
+
+test_run_rebase () {
+       result=$1
+       shift
+       test_expect_$result "rebase $* -f --root on linear history causes re-write" "
+               reset_rebase &&
+               git rebase $* -f --root c &&
+               ! test_cmp_rev a HEAD~2 &&
+               test_linear_range 'a b c' HEAD
+       "
+}
+test_run_rebase success ''
+test_run_rebase success -m
+test_run_rebase success -i
+test_run_rebase success -p
+
 test_done