#!/bin/sh global test_description := ''combined diff show only paths that are different to all parents'' source ./test-lib.sh # verify that diffc.expect matches output of # $(git diff -c --name-only HEAD HEAD^ HEAD^2) proc diffc_verify { git diff -c --name-only HEAD HEAD^ HEAD^2 >diffc.actual && test_cmp diffc.expect diffc.actual } test_expect_success 'trivial merge - combine-diff empty' ' for i in $(test_seq 1 9) do echo $i >$i.txt && git add $i.txt done && git commit -m "init" && git checkout -b side && for i in $(test_seq 2 9) do echo $i/2 >>$i.txt done && git commit -a -m "side 2-9" && git checkout master && echo 1/2 >1.txt && git commit -a -m "master 1" && git merge side && >diffc.expect && diffc_verify ' test_expect_success 'only one trully conflicting path' ' git checkout side && for i in $(test_seq 2 9) do echo $i/3 >>$i.txt done && echo "4side" >>4.txt && git commit -a -m "side 2-9 +4" && git checkout master && for i in $(test_seq 1 9) do echo $i/3 >>$i.txt done && echo "4master" >>4.txt && git commit -a -m "master 1-9 +4" && test_must_fail git merge side && cat <<-\EOF >4.txt && 4 4/2 4/3 4master 4side EOF git add 4.txt && git commit -m "merge side (2)" && echo 4.txt >diffc.expect && diffc_verify ' test_expect_success 'merge introduces new file' ' git checkout side && for i in $(test_seq 5 9) do echo $i/4 >>$i.txt done && git commit -a -m "side 5-9" && git checkout master && for i in $(test_seq 1 3) do echo $i/4 >>$i.txt done && git commit -a -m "master 1-3 +4hello" && git merge side && echo "Hello World" >4hello.txt && git add 4hello.txt && git commit --amend && echo 4hello.txt >diffc.expect && diffc_verify ' test_expect_success 'merge removed a file' ' git checkout side && for i in $(test_seq 5 9) do echo $i/5 >>$i.txt done && git commit -a -m "side 5-9" && git checkout master && for i in $(test_seq 1 3) do echo $i/4 >>$i.txt done && git commit -a -m "master 1-3" && git merge side && git rm 4.txt && git commit --amend && echo 4.txt >diffc.expect && diffc_verify ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"combined diff show only paths that are different to all parents">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: diffc_verify body: (BraceGroup children: [ (AndOr children: [ (SimpleCommand words: [ {(git)} {(diff)} {(-c)} {(--name-only)} {(HEAD)} {(HEAD) (Lit_Other "^")} {(HEAD) (Lit_Other "^") (2)} ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(diffc.actual)} spids:[46])] ) (C {(test_cmp)} {(diffc.expect)} {(diffc.actual)}) ] op_id: Op_DAmp ) ] spids: [26] ) spids: [21 25] ) (C {(test_expect_success)} {(SQ <"trivial merge - combine-diff empty">)} { (SQ <"\n"> <"\tfor i in $(test_seq 1 9)\n"> <"\tdo\n"> <"\t\techo $i >$i.txt\t&&\n"> <"\t\tgit add $i.txt\n"> <"\tdone &&\n"> <"\tgit commit -m \"init\" &&\n"> <"\tgit checkout -b side &&\n"> <"\tfor i in $(test_seq 2 9)\n"> <"\tdo\n"> <"\t\techo $i/2 >>$i.txt\n"> <"\tdone &&\n"> <"\tgit commit -a -m \"side 2-9\" &&\n"> <"\tgit checkout master &&\n"> <"\techo 1/2 >1.txt &&\n"> <"\tgit commit -a -m \"master 1\" &&\n"> <"\tgit merge side &&\n"> <"\t>diffc.expect &&\n"> <"\tdiffc_verify\n"> ) } ) (C {(test_expect_success)} {(SQ <"only one trully conflicting path">)} { (SQ <"\n"> <"\tgit checkout side &&\n"> <"\tfor i in $(test_seq 2 9)\n"> <"\tdo\n"> <"\t\techo $i/3 >>$i.txt\n"> <"\tdone &&\n"> <"\techo \"4side\" >>4.txt &&\n"> <"\tgit commit -a -m \"side 2-9 +4\" &&\n"> <"\tgit checkout master &&\n"> <"\tfor i in $(test_seq 1 9)\n"> <"\tdo\n"> <"\t\techo $i/3 >>$i.txt\n"> <"\tdone &&\n"> <"\techo \"4master\" >>4.txt &&\n"> <"\tgit commit -a -m \"master 1-9 +4\" &&\n"> <"\ttest_must_fail git merge side &&\n"> <"\tcat <<-\\EOF >4.txt &&\n"> <"\t4\n"> <"\t4/2\n"> <"\t4/3\n"> <"\t4master\n"> <"\t4side\n"> <"\tEOF\n"> <"\tgit add 4.txt &&\n"> <"\tgit commit -m \"merge side (2)\" &&\n"> <"\techo 4.txt >diffc.expect &&\n"> <"\tdiffc_verify\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge introduces new file">)} { (SQ <"\n"> <"\tgit checkout side &&\n"> <"\tfor i in $(test_seq 5 9)\n"> <"\tdo\n"> <"\t\techo $i/4 >>$i.txt\n"> <"\tdone &&\n"> <"\tgit commit -a -m \"side 5-9\" &&\n"> <"\tgit checkout master &&\n"> <"\tfor i in $(test_seq 1 3)\n"> <"\tdo\n"> <"\t\techo $i/4 >>$i.txt\n"> <"\tdone &&\n"> <"\tgit commit -a -m \"master 1-3 +4hello\" &&\n"> <"\tgit merge side &&\n"> <"\techo \"Hello World\" >4hello.txt &&\n"> <"\tgit add 4hello.txt &&\n"> <"\tgit commit --amend &&\n"> <"\techo 4hello.txt >diffc.expect &&\n"> <"\tdiffc_verify\n"> ) } ) (C {(test_expect_success)} {(SQ <"merge removed a file">)} { (SQ <"\n"> <"\tgit checkout side &&\n"> <"\tfor i in $(test_seq 5 9)\n"> <"\tdo\n"> <"\t\techo $i/5 >>$i.txt\n"> <"\tdone &&\n"> <"\tgit commit -a -m \"side 5-9\" &&\n"> <"\tgit checkout master &&\n"> <"\tfor i in $(test_seq 1 3)\n"> <"\tdo\n"> <"\t\techo $i/4 >>$i.txt\n"> <"\tdone &&\n"> <"\tgit commit -a -m \"master 1-3\" &&\n"> <"\tgit merge side &&\n"> <"\tgit rm 4.txt &&\n"> <"\tgit commit --amend &&\n"> <"\techo 4.txt >diffc.expect &&\n"> <"\tdiffc_verify\n"> ) } ) (C {(test_done)}) ] )