(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <"git merge\n"> <"\n"> <"Testing octopus merge when reducing parents to independent branches."> ) } spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <setup>)} { (SQ <"\n"> <"\techo c0 > c0.c &&\n"> <"\tgit add c0.c &&\n"> <"\tgit commit -m c0 &&\n"> <"\tgit tag c0 &&\n"> <"\techo c1 > c1.c &&\n"> <"\tgit add c1.c &&\n"> <"\tgit commit -m c1 &&\n"> <"\tgit tag c1 &&\n"> <"\tgit reset --hard c0 &&\n"> <"\techo c2 > c2.c &&\n"> <"\tgit add c2.c &&\n"> <"\tgit commit -m c2 &&\n"> <"\tgit tag c2 &&\n"> <"\tgit reset --hard c0 &&\n"> <"\techo c3 > c3.c &&\n"> <"\tgit add c3.c &&\n"> <"\tgit commit -m c3 &&\n"> <"\tgit tag c3 &&\n"> <"\tgit reset --hard c0 &&\n"> <"\techo c4 > c4.c &&\n"> <"\tgit add c4.c &&\n"> <"\tgit commit -m c4 &&\n"> <"\tgit tag c4 &&\n"> <"\techo c5 > c5.c &&\n"> <"\tgit add c5.c &&\n"> <"\tgit commit -m c5 &&\n"> <"\tgit tag c5\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge c1 with c2, c3, c4, c5">)} { (SQ <"\n"> <"\tgit reset --hard c1 &&\n"> <"\tgit merge c2 c3 c4 c5 &&\n"> <"\ttest \"$(git rev-parse c1)\" != \"$(git rev-parse HEAD)\" &&\n"> <"\ttest \"$(git rev-parse c1)\" = \"$(git rev-parse HEAD^1)\" &&\n"> <"\ttest \"$(git rev-parse c2)\" = \"$(git rev-parse HEAD^2)\" &&\n"> <"\ttest \"$(git rev-parse c3)\" = \"$(git rev-parse HEAD^3)\" &&\n"> <"\ttest \"$(git rev-parse c5)\" = \"$(git rev-parse HEAD^4)\" &&\n"> <"\tgit diff --exit-code &&\n"> <"\ttest -f c0.c &&\n"> <"\ttest -f c1.c &&\n"> <"\ttest -f c2.c &&\n"> <"\ttest -f c3.c &&\n"> <"\ttest -f c4.c &&\n"> <"\ttest -f c5.c &&\n"> <"\tgit show --format=%s -s >actual &&\n"> <"\t! grep c1 actual &&\n"> <"\tgrep c2 actual &&\n"> <"\tgrep c3 actual &&\n"> <"\t! grep c4 actual &&\n"> <"\tgrep c5 actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"pull c2, c3, c4, c5 into c1">)} { (SQ <"\n"> <"\tgit reset --hard c1 &&\n"> <"\tgit pull . c2 c3 c4 c5 &&\n"> <"\ttest \"$(git rev-parse c1)\" != \"$(git rev-parse HEAD)\" &&\n"> <"\ttest \"$(git rev-parse c1)\" = \"$(git rev-parse HEAD^1)\" &&\n"> <"\ttest \"$(git rev-parse c2)\" = \"$(git rev-parse HEAD^2)\" &&\n"> <"\ttest \"$(git rev-parse c3)\" = \"$(git rev-parse HEAD^3)\" &&\n"> <"\ttest \"$(git rev-parse c5)\" = \"$(git rev-parse HEAD^4)\" &&\n"> <"\tgit diff --exit-code &&\n"> <"\ttest -f c0.c &&\n"> <"\ttest -f c1.c &&\n"> <"\ttest -f c2.c &&\n"> <"\ttest -f c3.c &&\n"> <"\ttest -f c4.c &&\n"> <"\ttest -f c5.c &&\n"> <"\tgit show --format=%s -s >actual &&\n"> <"\t! grep c1 actual &&\n"> <"\tgrep c2 actual &&\n"> <"\tgrep c3 actual &&\n"> <"\t! grep c4 actual &&\n"> <"\tgrep c5 actual\n"> ) } ) (C {(test_expect_success)} {(SQ <setup>)} { (SQ <"\n"> <"\tfor i in A B C D E\n"> <"\tdo\n"> <"\t\techo $i > $i.c &&\n"> <"\t\tgit add $i.c &&\n"> <"\t\tgit commit -m $i &&\n"> <"\t\tgit tag $i\n"> <"\tdone &&\n"> <"\tgit reset --hard A &&\n"> <"\tfor i in F G H I\n"> <"\tdo\n"> <"\t\techo $i > $i.c &&\n"> <"\t\tgit add $i.c &&\n"> <"\t\tgit commit -m $i &&\n"> <"\t\tgit tag $i\n"> <"\tdone\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge E and I">)} {(SQ <"\n"> <"\tgit reset --hard A &&\n"> <"\tgit merge E I\n">)} ) (C {(test_expect_success)} {(SQ <"verify merge result">)} { (SQ <"\n"> <"\ttest $(git rev-parse HEAD^1) = $(git rev-parse E) &&\n"> <"\ttest $(git rev-parse HEAD^2) = $(git rev-parse I)\n"> ) } ) (C {(test_expect_success)} {(SQ <"add conflicts">)} { (SQ <"\n"> <"\tgit reset --hard E &&\n"> <"\techo foo > file.c &&\n"> <"\tgit add file.c &&\n"> <"\tgit commit -m E2 &&\n"> <"\tgit tag E2 &&\n"> <"\tgit reset --hard I &&\n"> <"\techo bar >file.c &&\n"> <"\tgit add file.c &&\n"> <"\tgit commit -m I2 &&\n"> <"\tgit tag I2\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge E2 and I2, causing a conflict and resolve it">)} { (SQ <"\n"> <"\tgit reset --hard A &&\n"> <"\ttest_must_fail git merge E2 I2 &&\n"> <"\techo baz > file.c &&\n"> <"\tgit add file.c &&\n"> <"\tgit commit -m \"resolve conflict\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"verify merge result">)} { (SQ <"\n"> <"\ttest $(git rev-parse HEAD^1) = $(git rev-parse E2) &&\n"> <"\ttest $(git rev-parse HEAD^2) = $(git rev-parse I2)\n"> ) } ) (C {(test_expect_success)} {(SQ <"fast-forward to redundant refs">)} {(SQ <"\n"> <"\tgit reset --hard c0 &&\n"> <"\tgit merge c4 c5\n">)} ) (C {(test_expect_success)} {(SQ <"verify merge result">)} {(SQ <"\n"> <"\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n">)} ) (C {(test_expect_success)} {(SQ <"merge up-to-date redundant refs">)} {(SQ <"\n"> <"\tgit reset --hard c5 &&\n"> <"\tgit merge c0 c4\n">)} ) (C {(test_expect_success)} {(SQ <"verify merge result">)} {(SQ <"\n"> <"\ttest $(git rev-parse HEAD) = $(git rev-parse c5)\n">)} ) (C {(test_done)}) ] )