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