Merge branch 'jk/maint-snprintf-va-copy' into maint
[git] / t / t4048-diff-combined-binary.sh
1 #!/bin/sh
2
3 test_description='combined and merge diff handle binary files and textconv'
4 . ./test-lib.sh
5
6 test_expect_success 'setup binary merge conflict' '
7         echo oneQ1 | q_to_nul >binary &&
8         git add binary &&
9         git commit -m one &&
10         echo twoQ2 | q_to_nul >binary &&
11         git commit -a -m two &&
12         git checkout -b branch-binary HEAD^ &&
13         echo threeQ3 | q_to_nul >binary &&
14         git commit -a -m three &&
15         test_must_fail git merge master &&
16         echo resolvedQhooray | q_to_nul >binary &&
17         git commit -a -m resolved
18 '
19
20 cat >expect <<'EOF'
21 resolved
22
23 diff --git a/binary b/binary
24 index 7ea6ded..9563691 100644
25 Binary files a/binary and b/binary differ
26 resolved
27
28 diff --git a/binary b/binary
29 index 6197570..9563691 100644
30 Binary files a/binary and b/binary differ
31 EOF
32 test_expect_success 'diff -m indicates binary-ness' '
33         git show --format=%s -m >actual &&
34         test_cmp expect actual
35 '
36
37 cat >expect <<'EOF'
38 resolved
39
40 diff --combined binary
41 index 7ea6ded,6197570..9563691
42 Binary files differ
43 EOF
44 test_expect_success 'diff -c indicates binary-ness' '
45         git show --format=%s -c >actual &&
46         test_cmp expect actual
47 '
48
49 cat >expect <<'EOF'
50 resolved
51
52 diff --cc binary
53 index 7ea6ded,6197570..9563691
54 Binary files differ
55 EOF
56 test_expect_success 'diff --cc indicates binary-ness' '
57         git show --format=%s --cc >actual &&
58         test_cmp expect actual
59 '
60
61 test_expect_success 'setup non-binary with binary attribute' '
62         git checkout master &&
63         test_commit one text &&
64         test_commit two text &&
65         git checkout -b branch-text HEAD^ &&
66         test_commit three text &&
67         test_must_fail git merge master &&
68         test_commit resolved text &&
69         echo text -diff >.gitattributes
70 '
71
72 cat >expect <<'EOF'
73 resolved
74
75 diff --git a/text b/text
76 index 2bdf67a..2ab19ae 100644
77 Binary files a/text and b/text differ
78 resolved
79
80 diff --git a/text b/text
81 index f719efd..2ab19ae 100644
82 Binary files a/text and b/text differ
83 EOF
84 test_expect_success 'diff -m respects binary attribute' '
85         git show --format=%s -m >actual &&
86         test_cmp expect actual
87 '
88
89 cat >expect <<'EOF'
90 resolved
91
92 diff --combined text
93 index 2bdf67a,f719efd..2ab19ae
94 Binary files differ
95 EOF
96 test_expect_success 'diff -c respects binary attribute' '
97         git show --format=%s -c >actual &&
98         test_cmp expect actual
99 '
100
101 cat >expect <<'EOF'
102 resolved
103
104 diff --cc text
105 index 2bdf67a,f719efd..2ab19ae
106 Binary files differ
107 EOF
108 test_expect_success 'diff --cc respects binary attribute' '
109         git show --format=%s --cc >actual &&
110         test_cmp expect actual
111 '
112
113 test_expect_success 'setup textconv attribute' '
114         echo "text diff=upcase" >.gitattributes &&
115         git config diff.upcase.textconv "tr a-z A-Z <"
116 '
117
118 cat >expect <<'EOF'
119 resolved
120
121 diff --git a/text b/text
122 index 2bdf67a..2ab19ae 100644
123 --- a/text
124 +++ b/text
125 @@ -1 +1 @@
126 -THREE
127 +RESOLVED
128 resolved
129
130 diff --git a/text b/text
131 index f719efd..2ab19ae 100644
132 --- a/text
133 +++ b/text
134 @@ -1 +1 @@
135 -TWO
136 +RESOLVED
137 EOF
138 test_expect_success 'diff -m respects textconv attribute' '
139         git show --format=%s -m >actual &&
140         test_cmp expect actual
141 '
142
143 cat >expect <<'EOF'
144 resolved
145
146 diff --combined text
147 index 2bdf67a,f719efd..2ab19ae
148 --- a/text
149 +++ b/text
150 @@@ -1,1 -1,1 +1,1 @@@
151 - THREE
152  -TWO
153 ++RESOLVED
154 EOF
155 test_expect_success 'diff -c respects textconv attribute' '
156         git show --format=%s -c >actual &&
157         test_cmp expect actual
158 '
159
160 cat >expect <<'EOF'
161 resolved
162
163 diff --cc text
164 index 2bdf67a,f719efd..2ab19ae
165 --- a/text
166 +++ b/text
167 @@@ -1,1 -1,1 +1,1 @@@
168 - THREE
169  -TWO
170 ++RESOLVED
171 EOF
172 test_expect_success 'diff --cc respects textconv attribute' '
173         git show --format=%s --cc >actual &&
174         test_cmp expect actual
175 '
176
177 cat >expect <<'EOF'
178 diff --combined text
179 index 2bdf67a,f719efd..2ab19ae
180 --- a/text
181 +++ b/text
182 @@@ -1,1 -1,1 +1,1 @@@
183 - three
184  -two
185 ++resolved
186 EOF
187 test_expect_success 'diff-tree plumbing does not respect textconv' '
188         git diff-tree HEAD -c -p >full &&
189         tail -n +2 full >actual &&
190         test_cmp expect actual
191 '
192
193 cat >expect <<'EOF'
194 diff --cc text
195 index 2bdf67a,f719efd..0000000
196 --- a/text
197 +++ b/text
198 @@@ -1,1 -1,1 +1,5 @@@
199 ++<<<<<<< HEAD
200  +THREE
201 ++=======
202 + TWO
203 ++>>>>>>> MASTER
204 EOF
205 test_expect_success 'diff --cc respects textconv on worktree file' '
206         git reset --hard HEAD^ &&
207         test_must_fail git merge master &&
208         git diff >actual &&
209         test_cmp expect actual
210 '
211
212 test_done