t3431: add rebase --fork-point tests
authorDenton Liu <liu.denton@gmail.com>
Sun, 25 Aug 2019 09:11:57 +0000 (05:11 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 26 Aug 2019 19:34:56 +0000 (12:34 -0700)
Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3431-rebase-fork-point.sh [new file with mode: 0755]

diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh
new file mode 100755 (executable)
index 0000000..2d5c6e6
--- /dev/null
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# Copyright (c) 2019 Denton Liu
+#
+
+test_description='git rebase --fork-point test'
+
+. ./test-lib.sh
+
+# A---B---D---E    (master)
+#      \
+#       C*---F---G (side)
+#
+# C was formerly part of master but master was rewound to remove C
+#
+test_expect_success setup '
+       test_commit A &&
+       test_commit B &&
+       test_commit C &&
+       git branch -t side &&
+       git reset --hard HEAD^ &&
+       test_commit D &&
+       test_commit E &&
+       git checkout side &&
+       test_commit F &&
+       test_commit G
+'
+
+test_rebase () {
+       expected="$1" &&
+       shift &&
+       test_expect_success "git rebase $*" "
+               git checkout master &&
+               git reset --hard E &&
+               git checkout side &&
+               git reset --hard G &&
+               git rebase $* &&
+               test_write_lines $expected >expect &&
+               git log --pretty=%s >actual &&
+               test_cmp expect actual
+       "
+}
+
+test_rebase 'G F E D B A'
+test_rebase 'G F D B A' --onto D
+test_rebase 'G F C E D B A' --no-fork-point
+test_rebase 'G F C D B A' --no-fork-point --onto D
+test_rebase 'G F E D B A' --fork-point refs/heads/master
+test_rebase 'G F D B A' --fork-point --onto D refs/heads/master
+test_rebase 'G F C E D B A' refs/heads/master
+test_rebase 'G F C D B A' --onto D refs/heads/master
+
+test_done