|  | #!/bin/sh | 
|  |  | 
|  | test_description='combined diff show only paths that are different to all parents' | 
|  |  | 
|  | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main | 
|  | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  | # verify that diffc.expect matches output of | 
|  | # $(git diff -c --name-only HEAD HEAD^ HEAD^2) | 
|  | 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 || return 1 | 
|  | done && | 
|  | git commit -m "init" && | 
|  | git checkout -b side && | 
|  | for i in $(test_seq 2 9) | 
|  | do | 
|  | echo $i/2 >>$i.txt || return 1 | 
|  | done && | 
|  | git commit -a -m "side 2-9" && | 
|  | git checkout main && | 
|  | echo 1/2 >1.txt && | 
|  | git commit -a -m "main 1" && | 
|  | git merge side && | 
|  | >diffc.expect && | 
|  | diffc_verify | 
|  | ' | 
|  |  | 
|  |  | 
|  | test_expect_success 'only one truly conflicting path' ' | 
|  | git checkout side && | 
|  | for i in $(test_seq 2 9) | 
|  | do | 
|  | echo $i/3 >>$i.txt || return 1 | 
|  | done && | 
|  | echo "4side" >>4.txt && | 
|  | git commit -a -m "side 2-9 +4" && | 
|  | git checkout main && | 
|  | for i in $(test_seq 1 9) | 
|  | do | 
|  | echo $i/3 >>$i.txt || return 1 | 
|  | done && | 
|  | echo "4main" >>4.txt && | 
|  | git commit -a -m "main 1-9 +4" && | 
|  | test_must_fail git merge side && | 
|  | cat <<-\EOF >4.txt && | 
|  | 4 | 
|  | 4/2 | 
|  | 4/3 | 
|  | 4main | 
|  | 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 || return 1 | 
|  | done && | 
|  | git commit -a -m "side 5-9" && | 
|  | git checkout main && | 
|  | for i in $(test_seq 1 3) | 
|  | do | 
|  | echo $i/4 >>$i.txt || return 1 | 
|  | done && | 
|  | git commit -a -m "main 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 || return 1 | 
|  | done && | 
|  | git commit -a -m "side 5-9" && | 
|  | git checkout main && | 
|  | for i in $(test_seq 1 3) | 
|  | do | 
|  | echo $i/4 >>$i.txt || return 1 | 
|  | done && | 
|  | git commit -a -m "main 1-3" && | 
|  | git merge side && | 
|  | git rm 4.txt && | 
|  | git commit --amend && | 
|  | echo 4.txt >diffc.expect && | 
|  | diffc_verify | 
|  | ' | 
|  |  | 
|  | test_done |