]> git.ipfire.org Git - thirdparty/git.git/blame - t/t4061-diff-indent.sh
Merge branch 'zh/difftool-skip-to'
[thirdparty/git.git] / t / t4061-diff-indent.sh
CommitLineData
433860f3
MH
1#!/bin/sh
2
3test_description='Test diff indent heuristic.
4
5'
8f37854b 6GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
334afbc7
JS
7export 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.
14compare_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.
22compare_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
28test_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 160test_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
165test_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 170test_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 175test_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
180test_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
185test_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
190test_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
195test_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
202test_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 207test_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
212test_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
217test_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 222test_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
228test_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
235test_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 240test_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
245test_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
250test_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
255test_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
260test_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
267test_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 275test_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 283test_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
291test_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
299test_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
307test_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
317test_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 326test_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
335test_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
344test_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
353test_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
362test_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 371test_done