describe: teach --match to handle branches and remotes
[git] / t / t4057-diff-combined-paths.sh
1 #!/bin/sh
2
3 test_description='combined diff show only paths that are different to all parents'
4
5 . ./test-lib.sh
6
7 # verify that diffc.expect matches output of
8 # $(git diff -c --name-only HEAD HEAD^ HEAD^2)
9 diffc_verify () {
10         git diff -c --name-only HEAD HEAD^ HEAD^2 >diffc.actual &&
11         test_cmp diffc.expect diffc.actual
12 }
13
14 test_expect_success 'trivial merge - combine-diff empty' '
15         for i in $(test_seq 1 9)
16         do
17                 echo $i >$i.txt &&
18                 git add $i.txt
19         done &&
20         git commit -m "init" &&
21         git checkout -b side &&
22         for i in $(test_seq 2 9)
23         do
24                 echo $i/2 >>$i.txt
25         done &&
26         git commit -a -m "side 2-9" &&
27         git checkout master &&
28         echo 1/2 >1.txt &&
29         git commit -a -m "master 1" &&
30         git merge side &&
31         >diffc.expect &&
32         diffc_verify
33 '
34
35
36 test_expect_success 'only one trully conflicting path' '
37         git checkout side &&
38         for i in $(test_seq 2 9)
39         do
40                 echo $i/3 >>$i.txt
41         done &&
42         echo "4side" >>4.txt &&
43         git commit -a -m "side 2-9 +4" &&
44         git checkout master &&
45         for i in $(test_seq 1 9)
46         do
47                 echo $i/3 >>$i.txt
48         done &&
49         echo "4master" >>4.txt &&
50         git commit -a -m "master 1-9 +4" &&
51         test_must_fail git merge side &&
52         cat <<-\EOF >4.txt &&
53         4
54         4/2
55         4/3
56         4master
57         4side
58         EOF
59         git add 4.txt &&
60         git commit -m "merge side (2)" &&
61         echo 4.txt >diffc.expect &&
62         diffc_verify
63 '
64
65 test_expect_success 'merge introduces new file' '
66         git checkout side &&
67         for i in $(test_seq 5 9)
68         do
69                 echo $i/4 >>$i.txt
70         done &&
71         git commit -a -m "side 5-9" &&
72         git checkout master &&
73         for i in $(test_seq 1 3)
74         do
75                 echo $i/4 >>$i.txt
76         done &&
77         git commit -a -m "master 1-3 +4hello" &&
78         git merge side &&
79         echo "Hello World" >4hello.txt &&
80         git add 4hello.txt &&
81         git commit --amend &&
82         echo 4hello.txt >diffc.expect &&
83         diffc_verify
84 '
85
86 test_expect_success 'merge removed a file' '
87         git checkout side &&
88         for i in $(test_seq 5 9)
89         do
90                 echo $i/5 >>$i.txt
91         done &&
92         git commit -a -m "side 5-9" &&
93         git checkout master &&
94         for i in $(test_seq 1 3)
95         do
96                 echo $i/4 >>$i.txt
97         done &&
98         git commit -a -m "master 1-3" &&
99         git merge side &&
100         git rm 4.txt &&
101         git commit --amend &&
102         echo 4.txt >diffc.expect &&
103         diffc_verify
104 '
105
106 test_done