]>
Commit | Line | Data |
---|---|---|
433860f3 MH |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test diff indent heuristic. | |
4 | ||
5 | ' | |
6 | . ./test-lib.sh | |
7 | . "$TEST_DIRECTORY"/diff-lib.sh | |
8 | ||
9 | # Compare two diff outputs. Ignore "index" lines, because we don't | |
10 | # care about SHA-1s or file modes. | |
11 | compare_diff () { | |
12 | sed -e "/^index /d" <"$1" >.tmp-1 | |
13 | sed -e "/^index /d" <"$2" >.tmp-2 | |
14 | test_cmp .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2 | |
15 | } | |
16 | ||
5b162879 MH |
17 | # Compare blame output using the expectation for a diff as reference. |
18 | # Only look for the lines coming from non-boundary commits. | |
19 | compare_blame () { | |
1f27522d | 20 | sed -n -e "1,4d" -e "s/^+//p" <"$1" >.tmp-1 |
5b162879 MH |
21 | sed -ne "s/^[^^][^)]*) *//p" <"$2" >.tmp-2 |
22 | test_cmp .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2 | |
23 | } | |
24 | ||
433860f3 MH |
25 | test_expect_success 'prepare' ' |
26 | cat <<-\EOF >spaces.txt && | |
27 | 1 | |
28 | 2 | |
29 | a | |
30 | ||
31 | b | |
32 | 3 | |
33 | 4 | |
34 | EOF | |
35 | ||
36 | cat <<-\EOF >functions.c && | |
37 | 1 | |
38 | 2 | |
39 | /* function */ | |
40 | foo() { | |
41 | foo | |
42 | } | |
43 | ||
44 | 3 | |
45 | 4 | |
46 | EOF | |
47 | ||
48 | git add spaces.txt functions.c && | |
49 | test_tick && | |
50 | git commit -m initial && | |
51 | git branch old && | |
52 | ||
53 | cat <<-\EOF >spaces.txt && | |
54 | 1 | |
55 | 2 | |
56 | a | |
57 | ||
58 | b | |
59 | a | |
60 | ||
61 | b | |
62 | 3 | |
63 | 4 | |
64 | EOF | |
65 | ||
66 | cat <<-\EOF >functions.c && | |
67 | 1 | |
68 | 2 | |
69 | /* function */ | |
70 | bar() { | |
71 | foo | |
72 | } | |
73 | ||
74 | /* function */ | |
75 | foo() { | |
76 | foo | |
77 | } | |
78 | ||
79 | 3 | |
80 | 4 | |
81 | EOF | |
82 | ||
83 | git add spaces.txt functions.c && | |
84 | test_tick && | |
85 | git commit -m initial && | |
86 | git branch new && | |
87 | ||
88 | tr "_" " " <<-\EOF >spaces-expect && | |
89 | diff --git a/spaces.txt b/spaces.txt | |
90 | --- a/spaces.txt | |
91 | +++ b/spaces.txt | |
92 | @@ -3,5 +3,8 @@ | |
93 | a | |
94 | _ | |
95 | b | |
96 | +a | |
97 | + | |
98 | +b | |
99 | 3 | |
100 | 4 | |
101 | EOF | |
102 | ||
103 | tr "_" " " <<-\EOF >spaces-compacted-expect && | |
104 | diff --git a/spaces.txt b/spaces.txt | |
105 | --- a/spaces.txt | |
106 | +++ b/spaces.txt | |
107 | @@ -2,6 +2,9 @@ | |
108 | 2 | |
109 | a | |
110 | _ | |
111 | +b | |
112 | +a | |
113 | + | |
114 | b | |
115 | 3 | |
116 | 4 | |
117 | EOF | |
118 | ||
119 | tr "_" " " <<-\EOF >functions-expect && | |
120 | diff --git a/functions.c b/functions.c | |
121 | --- a/functions.c | |
122 | +++ b/functions.c | |
123 | @@ -1,6 +1,11 @@ | |
124 | 1 | |
125 | 2 | |
126 | /* function */ | |
127 | +bar() { | |
128 | + foo | |
129 | +} | |
130 | + | |
131 | +/* function */ | |
132 | foo() { | |
133 | foo | |
134 | } | |
135 | EOF | |
136 | ||
137 | tr "_" " " <<-\EOF >functions-compacted-expect | |
138 | diff --git a/functions.c b/functions.c | |
139 | --- a/functions.c | |
140 | +++ b/functions.c | |
141 | @@ -1,5 +1,10 @@ | |
142 | 1 | |
143 | 2 | |
144 | +/* function */ | |
145 | +bar() { | |
146 | + foo | |
147 | +} | |
148 | + | |
149 | /* function */ | |
150 | foo() { | |
151 | foo | |
152 | EOF | |
153 | ' | |
154 | ||
33de7163 SB |
155 | # --- diff tests ---------------------------------------------------------- |
156 | ||
433860f3 | 157 | test_expect_success 'diff: ugly spaces' ' |
33de7163 | 158 | git diff --no-indent-heuristic old new -- spaces.txt >out && |
433860f3 MH |
159 | compare_diff spaces-expect out |
160 | ' | |
161 | ||
33de7163 SB |
162 | test_expect_success 'diff: --no-indent-heuristic overrides config' ' |
163 | git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 && | |
164 | compare_diff spaces-expect out2 | |
165 | ' | |
166 | ||
433860f3 | 167 | test_expect_success 'diff: nice spaces with --indent-heuristic' ' |
33de7163 | 168 | git -c diff.indentHeuristic=false diff --indent-heuristic old new -- spaces.txt >out-compacted && |
433860f3 MH |
169 | compare_diff spaces-compacted-expect out-compacted |
170 | ' | |
171 | ||
33de7163 | 172 | test_expect_success 'diff: nice spaces with diff.indentHeuristic=true' ' |
433860f3 MH |
173 | git -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 && |
174 | compare_diff spaces-compacted-expect out-compacted2 | |
175 | ' | |
176 | ||
433860f3 MH |
177 | test_expect_success 'diff: --indent-heuristic with --patience' ' |
178 | git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 && | |
179 | compare_diff spaces-compacted-expect out-compacted3 | |
180 | ' | |
181 | ||
182 | test_expect_success 'diff: --indent-heuristic with --histogram' ' | |
183 | git diff --indent-heuristic --histogram old new -- spaces.txt >out-compacted4 && | |
184 | compare_diff spaces-compacted-expect out-compacted4 | |
185 | ' | |
186 | ||
187 | test_expect_success 'diff: ugly functions' ' | |
33de7163 | 188 | git diff --no-indent-heuristic old new -- functions.c >out && |
433860f3 MH |
189 | compare_diff functions-expect out |
190 | ' | |
191 | ||
192 | test_expect_success 'diff: nice functions with --indent-heuristic' ' | |
193 | git diff --indent-heuristic old new -- functions.c >out-compacted && | |
194 | compare_diff functions-compacted-expect out-compacted | |
195 | ' | |
196 | ||
33de7163 | 197 | # --- blame tests --------------------------------------------------------- |
5b162879 MH |
198 | |
199 | test_expect_success 'blame: nice spaces with --indent-heuristic' ' | |
200 | git blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted && | |
201 | compare_blame spaces-compacted-expect out-blame-compacted | |
202 | ' | |
203 | ||
33de7163 | 204 | test_expect_success 'blame: nice spaces with diff.indentHeuristic=true' ' |
5b162879 MH |
205 | git -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 && |
206 | compare_blame spaces-compacted-expect out-blame-compacted2 | |
207 | ' | |
208 | ||
33de7163 SB |
209 | test_expect_success 'blame: ugly spaces with --no-indent-heuristic' ' |
210 | git blame --no-indent-heuristic old..new -- spaces.txt >out-blame && | |
211 | compare_blame spaces-expect out-blame | |
212 | ' | |
213 | ||
214 | test_expect_success 'blame: ugly spaces with diff.indentHeuristic=false' ' | |
215 | git -c diff.indentHeuristic=false blame old..new -- spaces.txt >out-blame2 && | |
216 | compare_blame spaces-expect out-blame2 | |
217 | ' | |
218 | ||
5b162879 | 219 | test_expect_success 'blame: --no-indent-heuristic overrides config' ' |
33de7163 | 220 | git -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame3 && |
5b162879 | 221 | git blame old..new -- spaces.txt >out-blame && |
33de7163 | 222 | compare_blame spaces-expect out-blame3 |
5b162879 MH |
223 | ' |
224 | ||
33de7163 SB |
225 | test_expect_success 'blame: --indent-heuristic overrides config' ' |
226 | git -c diff.indentHeuristic=false blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted3 && | |
227 | compare_blame spaces-compacted-expect out-blame-compacted2 | |
228 | ' | |
229 | ||
230 | # --- diff-tree tests ----------------------------------------------------- | |
231 | ||
37590ce3 MB |
232 | test_expect_success 'diff-tree: nice spaces with --indent-heuristic' ' |
233 | git diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted && | |
234 | compare_diff spaces-compacted-expect out-diff-tree-compacted | |
235 | ' | |
236 | ||
33de7163 | 237 | test_expect_success 'diff-tree: nice spaces with diff.indentHeuristic=true' ' |
37590ce3 MB |
238 | git -c diff.indentHeuristic=true diff-tree -p old new -- spaces.txt >out-diff-tree-compacted2 && |
239 | compare_diff spaces-compacted-expect out-diff-tree-compacted2 | |
240 | ' | |
241 | ||
33de7163 SB |
242 | test_expect_success 'diff-tree: ugly spaces with --no-indent-heuristic' ' |
243 | git diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree && | |
37590ce3 MB |
244 | compare_diff spaces-expect out-diff-tree |
245 | ' | |
246 | ||
33de7163 SB |
247 | test_expect_success 'diff-tree: ugly spaces with diff.indentHeuristic=false' ' |
248 | git -c diff.indentHeuristic=false diff-tree -p old new -- spaces.txt >out-diff-tree2 && | |
249 | compare_diff spaces-expect out-diff-tree2 | |
250 | ' | |
251 | ||
252 | test_expect_success 'diff-tree: --indent-heuristic overrides config' ' | |
253 | git -c diff.indentHeuristic=false diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted3 && | |
254 | compare_diff spaces-compacted-expect out-diff-tree-compacted3 | |
255 | ' | |
256 | ||
257 | test_expect_success 'diff-tree: --no-indent-heuristic overrides config' ' | |
258 | git -c diff.indentHeuristic=true diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree3 && | |
259 | compare_diff spaces-expect out-diff-tree3 | |
260 | ' | |
261 | ||
262 | # --- diff-index tests ---------------------------------------------------- | |
263 | ||
37590ce3 MB |
264 | test_expect_success 'diff-index: nice spaces with --indent-heuristic' ' |
265 | git checkout -B diff-index && | |
266 | git reset --soft HEAD~ && | |
267 | git diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted && | |
268 | compare_diff spaces-compacted-expect out-diff-index-compacted && | |
269 | git checkout -f master | |
270 | ' | |
271 | ||
33de7163 | 272 | test_expect_success 'diff-index: nice spaces with diff.indentHeuristic=true' ' |
37590ce3 MB |
273 | git checkout -B diff-index && |
274 | git reset --soft HEAD~ && | |
275 | git -c diff.indentHeuristic=true diff-index -p old -- spaces.txt >out-diff-index-compacted2 && | |
276 | compare_diff spaces-compacted-expect out-diff-index-compacted2 && | |
277 | git checkout -f master | |
278 | ' | |
279 | ||
33de7163 | 280 | test_expect_success 'diff-index: ugly spaces with --no-indent-heuristic' ' |
37590ce3 MB |
281 | git checkout -B diff-index && |
282 | git reset --soft HEAD~ && | |
33de7163 | 283 | git diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index && |
37590ce3 MB |
284 | compare_diff spaces-expect out-diff-index && |
285 | git checkout -f master | |
286 | ' | |
287 | ||
33de7163 SB |
288 | test_expect_success 'diff-index: ugly spaces with diff.indentHeuristic=false' ' |
289 | git checkout -B diff-index && | |
290 | git reset --soft HEAD~ && | |
291 | git -c diff.indentHeuristic=false diff-index -p old -- spaces.txt >out-diff-index2 && | |
292 | compare_diff spaces-expect out-diff-index2 && | |
293 | git checkout -f master | |
294 | ' | |
295 | ||
296 | test_expect_success 'diff-index: --indent-heuristic overrides config' ' | |
297 | git checkout -B diff-index && | |
298 | git reset --soft HEAD~ && | |
299 | git -c diff.indentHeuristic=false diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted3 && | |
300 | compare_diff spaces-compacted-expect out-diff-index-compacted3 && | |
301 | git checkout -f master | |
302 | ' | |
303 | ||
304 | test_expect_success 'diff-index: --no-indent-heuristic overrides config' ' | |
305 | git checkout -B diff-index && | |
306 | git reset --soft HEAD~ && | |
307 | git -c diff.indentHeuristic=true diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index3 && | |
308 | compare_diff spaces-expect out-diff-index3 && | |
309 | git checkout -f master | |
310 | ' | |
311 | ||
312 | # --- diff-files tests ---------------------------------------------------- | |
313 | ||
314 | test_expect_success 'diff-files: nice spaces with --indent-heuristic' ' | |
37590ce3 MB |
315 | git checkout -B diff-files && |
316 | git reset HEAD~ && | |
33de7163 | 317 | git diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw && |
37590ce3 MB |
318 | grep -v index out-diff-files-raw >out-diff-files-compacted && |
319 | compare_diff spaces-compacted-expect out-diff-files-compacted && | |
320 | git checkout -f master | |
321 | ' | |
322 | ||
33de7163 | 323 | test_expect_success 'diff-files: nice spaces with diff.indentHeuristic=true' ' |
37590ce3 MB |
324 | git checkout -B diff-files && |
325 | git reset HEAD~ && | |
326 | git -c diff.indentHeuristic=true diff-files -p spaces.txt >out-diff-files-raw2 && | |
327 | grep -v index out-diff-files-raw2 >out-diff-files-compacted2 && | |
328 | compare_diff spaces-compacted-expect out-diff-files-compacted2 && | |
329 | git checkout -f master | |
330 | ' | |
331 | ||
33de7163 SB |
332 | test_expect_success 'diff-files: ugly spaces with --no-indent-heuristic' ' |
333 | git checkout -B diff-files && | |
334 | git reset HEAD~ && | |
335 | git diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw && | |
336 | grep -v index out-diff-files-raw >out-diff-files && | |
337 | compare_diff spaces-expect out-diff-files && | |
338 | git checkout -f master | |
339 | ' | |
340 | ||
341 | test_expect_success 'diff-files: ugly spaces with diff.indentHeuristic=false' ' | |
342 | git checkout -B diff-files && | |
343 | git reset HEAD~ && | |
344 | git -c diff.indentHeuristic=false diff-files -p spaces.txt >out-diff-files-raw2 && | |
345 | grep -v index out-diff-files-raw2 >out-diff-files && | |
346 | compare_diff spaces-expect out-diff-files && | |
347 | git checkout -f master | |
348 | ' | |
349 | ||
350 | test_expect_success 'diff-files: --indent-heuristic overrides config' ' | |
351 | git checkout -B diff-files && | |
352 | git reset HEAD~ && | |
353 | git -c diff.indentHeuristic=false diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw3 && | |
354 | grep -v index out-diff-files-raw3 >out-diff-files-compacted && | |
355 | compare_diff spaces-compacted-expect out-diff-files-compacted && | |
356 | git checkout -f master | |
357 | ' | |
358 | ||
37590ce3 MB |
359 | test_expect_success 'diff-files: --no-indent-heuristic overrides config' ' |
360 | git checkout -B diff-files && | |
361 | git reset HEAD~ && | |
33de7163 SB |
362 | git -c diff.indentHeuristic=true diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw4 && |
363 | grep -v index out-diff-files-raw4 >out-diff-files && | |
37590ce3 MB |
364 | compare_diff spaces-expect out-diff-files && |
365 | git checkout -f master | |
366 | ' | |
367 | ||
433860f3 | 368 | test_done |