commit-graph: fix bug around octopus merges
[gitweb.git] / t / t7603-merge-reduce-heads.sh
index 17b19dc11f2b1a5d26a16f447733880f3cf30d26..98948955ae507ef007dc541f7e981d06bf7b49ab 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='git-merge
+test_description='git merge
 
 Testing octopus merge when reducing parents to independent branches.'
 
@@ -57,7 +57,108 @@ test_expect_success 'merge c1 with c2, c3, c4, c5' '
        test -f c2.c &&
        test -f c3.c &&
        test -f c4.c &&
-       test -f c5.c
+       test -f c5.c &&
+       git show --format=%s -s >actual &&
+       ! grep c1 actual &&
+       grep c2 actual &&
+       grep c3 actual &&
+       ! grep c4 actual &&
+       grep c5 actual
+'
+
+test_expect_success 'pull c2, c3, c4, c5 into c1' '
+       git reset --hard c1 &&
+       git pull . c2 c3 c4 c5 &&
+       test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
+       test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" &&
+       test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" &&
+       test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" &&
+       test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" &&
+       git diff --exit-code &&
+       test -f c0.c &&
+       test -f c1.c &&
+       test -f c2.c &&
+       test -f c3.c &&
+       test -f c4.c &&
+       test -f c5.c &&
+       git show --format=%s -s >actual &&
+       ! grep c1 actual &&
+       grep c2 actual &&
+       grep c3 actual &&
+       ! grep c4 actual &&
+       grep c5 actual
+'
+
+test_expect_success 'setup' '
+       for i in A B C D E
+       do
+               echo $i > $i.c &&
+               git add $i.c &&
+               git commit -m $i &&
+               git tag $i
+       done &&
+       git reset --hard A &&
+       for i in F G H I
+       do
+               echo $i > $i.c &&
+               git add $i.c &&
+               git commit -m $i &&
+               git tag $i
+       done
+'
+
+test_expect_success 'merge E and I' '
+       git reset --hard A &&
+       git merge E I
+'
+
+test_expect_success 'verify merge result' '
+       test $(git rev-parse HEAD^1) = $(git rev-parse E) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse I)
+'
+
+test_expect_success 'add conflicts' '
+       git reset --hard E &&
+       echo foo > file.c &&
+       git add file.c &&
+       git commit -m E2 &&
+       git tag E2 &&
+       git reset --hard I &&
+       echo bar >file.c &&
+       git add file.c &&
+       git commit -m I2 &&
+       git tag I2
+'
+
+test_expect_success 'merge E2 and I2, causing a conflict and resolve it' '
+       git reset --hard A &&
+       test_must_fail git merge E2 I2 &&
+       echo baz > file.c &&
+       git add file.c &&
+       git commit -m "resolve conflict"
+'
+
+test_expect_success 'verify merge result' '
+       test $(git rev-parse HEAD^1) = $(git rev-parse E2) &&
+       test $(git rev-parse HEAD^2) = $(git rev-parse I2)
+'
+
+test_expect_success 'fast-forward to redundant refs' '
+       git reset --hard c0 &&
+       git merge c4 c5
+'
+
+test_expect_success 'verify merge result' '
+       test $(git rev-parse HEAD) = $(git rev-parse c5)
+'
+
+test_expect_success 'merge up-to-date redundant refs' '
+       git reset --hard c5 &&
+       git merge c0 c4
+'
+
+test_expect_success 'verify merge result' '
+       test $(git rev-parse HEAD) = $(git rev-parse c5)
 '
 
 test_done