]>
Commit | Line | Data |
---|---|---|
2344d47f JS |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2006 Johannes E. Schindelin | |
4 | # | |
5 | ||
6 | test_description='Test special whitespace in diff engine. | |
7 | ||
8 | ' | |
9 | . ./test-lib.sh | |
bfdbee98 | 10 | . "$TEST_DIRECTORY"/diff-lib.sh |
2344d47f JS |
11 | |
12 | # Ray Lehtiniemi's example | |
13 | ||
14 | cat << EOF > x | |
15 | do { | |
16 | nothing; | |
17 | } while (0); | |
18 | EOF | |
19 | ||
5be60078 | 20 | git update-index --add x |
2344d47f JS |
21 | |
22 | cat << EOF > x | |
23 | do | |
24 | { | |
25 | nothing; | |
26 | } | |
27 | while (0); | |
28 | EOF | |
29 | ||
30 | cat << EOF > expect | |
31 | diff --git a/x b/x | |
32 | index adf3937..6edc172 100644 | |
33 | --- a/x | |
34 | +++ b/x | |
35 | @@ -1,3 +1,5 @@ | |
36 | -do { | |
37 | +do | |
38 | +{ | |
39 | nothing; | |
40 | -} while (0); | |
41 | +} | |
42 | +while (0); | |
43 | EOF | |
44 | ||
5be60078 | 45 | git diff > out |
3af82863 | 46 | test_expect_success "Ray's example without options" 'test_cmp expect out' |
2344d47f | 47 | |
5be60078 | 48 | git diff -w > out |
3af82863 | 49 | test_expect_success "Ray's example with -w" 'test_cmp expect out' |
2344d47f | 50 | |
5be60078 | 51 | git diff -b > out |
3af82863 | 52 | test_expect_success "Ray's example with -b" 'test_cmp expect out' |
2344d47f | 53 | |
4035b46e | 54 | tr 'Q' '\015' << EOF > x |
2344d47f JS |
55 | whitespace at beginning |
56 | whitespace change | |
57 | whitespace in the middle | |
58 | whitespace at end | |
59 | unchanged line | |
4035b46e | 60 | CR at endQ |
2344d47f JS |
61 | EOF |
62 | ||
5be60078 | 63 | git update-index x |
2344d47f | 64 | |
74f16b0c | 65 | tr '_' ' ' << EOF > x |
2344d47f JS |
66 | whitespace at beginning |
67 | whitespace change | |
68 | white space in the middle | |
74f16b0c | 69 | whitespace at end__ |
2344d47f JS |
70 | unchanged line |
71 | CR at end | |
72 | EOF | |
73 | ||
74f16b0c | 74 | tr 'Q_' '\015 ' << EOF > expect |
2344d47f JS |
75 | diff --git a/x b/x |
76 | index d99af23..8b32fb5 100644 | |
77 | --- a/x | |
78 | +++ b/x | |
79 | @@ -1,6 +1,6 @@ | |
80 | -whitespace at beginning | |
81 | -whitespace change | |
82 | -whitespace in the middle | |
83 | -whitespace at end | |
84 | + whitespace at beginning | |
85 | +whitespace change | |
86 | +white space in the middle | |
74f16b0c | 87 | +whitespace at end__ |
2344d47f | 88 | unchanged line |
4035b46e | 89 | -CR at endQ |
2344d47f JS |
90 | +CR at end |
91 | EOF | |
5be60078 | 92 | git diff > out |
3af82863 | 93 | test_expect_success 'another test, without options' 'test_cmp expect out' |
2344d47f JS |
94 | |
95 | cat << EOF > expect | |
2344d47f | 96 | EOF |
5be60078 | 97 | git diff -w > out |
3af82863 | 98 | test_expect_success 'another test, with -w' 'test_cmp expect out' |
7a383291 | 99 | git diff -w -b > out |
6d12acef | 100 | test_expect_success 'another test, with -w -b' 'test_cmp expect out' |
7a383291 | 101 | git diff -w --ignore-space-at-eol > out |
6d12acef | 102 | test_expect_success 'another test, with -w --ignore-space-at-eol' 'test_cmp expect out' |
7a383291 | 103 | git diff -w -b --ignore-space-at-eol > out |
6d12acef | 104 | test_expect_success 'another test, with -w -b --ignore-space-at-eol' 'test_cmp expect out' |
2344d47f | 105 | |
baf5aaa3 | 106 | tr 'Q_' '\015 ' << EOF > expect |
2344d47f JS |
107 | diff --git a/x b/x |
108 | index d99af23..8b32fb5 100644 | |
109 | --- a/x | |
110 | +++ b/x | |
111 | @@ -1,6 +1,6 @@ | |
112 | -whitespace at beginning | |
113 | + whitespace at beginning | |
baf5aaa3 | 114 | whitespace change |
2344d47f | 115 | -whitespace in the middle |
2344d47f | 116 | +white space in the middle |
baf5aaa3 | 117 | whitespace at end__ |
2344d47f | 118 | unchanged line |
baf5aaa3 | 119 | CR at end |
2344d47f | 120 | EOF |
5be60078 | 121 | git diff -b > out |
3af82863 | 122 | test_expect_success 'another test, with -b' 'test_cmp expect out' |
7a383291 | 123 | git diff -b --ignore-space-at-eol > out |
6d12acef | 124 | test_expect_success 'another test, with -b --ignore-space-at-eol' 'test_cmp expect out' |
7a383291 | 125 | |
baf5aaa3 | 126 | tr 'Q_' '\015 ' << EOF > expect |
7a383291 KC |
127 | diff --git a/x b/x |
128 | index d99af23..8b32fb5 100644 | |
129 | --- a/x | |
130 | +++ b/x | |
131 | @@ -1,6 +1,6 @@ | |
132 | -whitespace at beginning | |
133 | -whitespace change | |
134 | -whitespace in the middle | |
135 | + whitespace at beginning | |
136 | +whitespace change | |
137 | +white space in the middle | |
baf5aaa3 | 138 | whitespace at end__ |
7a383291 | 139 | unchanged line |
baf5aaa3 | 140 | CR at end |
7a383291 KC |
141 | EOF |
142 | git diff --ignore-space-at-eol > out | |
143 | test_expect_success 'another test, with --ignore-space-at-eol' 'test_cmp expect out' | |
2344d47f | 144 | |
36617af7 AP |
145 | test_expect_success 'ignore-blank-lines: only new lines' ' |
146 | test_seq 5 >x && | |
147 | git update-index x && | |
148 | test_seq 5 | sed "/3/i \\ | |
149 | " >x && | |
150 | git diff --ignore-blank-lines >out && | |
151 | >expect && | |
152 | test_cmp out expect | |
153 | ' | |
154 | ||
155 | test_expect_success 'ignore-blank-lines: only new lines with space' ' | |
156 | test_seq 5 >x && | |
157 | git update-index x && | |
158 | test_seq 5 | sed "/3/i \ " >x && | |
159 | git diff -w --ignore-blank-lines >out && | |
160 | >expect && | |
161 | test_cmp out expect | |
162 | ' | |
163 | ||
164 | test_expect_success 'ignore-blank-lines: after change' ' | |
165 | cat <<-\EOF >x && | |
166 | 1 | |
167 | 2 | |
168 | ||
169 | 3 | |
170 | 4 | |
171 | 5 | |
172 | ||
173 | 6 | |
174 | 7 | |
175 | EOF | |
176 | git update-index x && | |
177 | cat <<-\EOF >x && | |
178 | change | |
179 | ||
180 | 1 | |
181 | 2 | |
182 | 3 | |
183 | 4 | |
184 | 5 | |
185 | 6 | |
186 | ||
187 | 7 | |
188 | EOF | |
189 | git diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp && | |
190 | cat <<-\EOF >expected && | |
191 | diff --git a/x b/x | |
192 | --- a/x | |
193 | +++ b/x | |
194 | @@ -1,6 +1,7 @@ | |
195 | +change | |
196 | + | |
197 | 1 | |
198 | 2 | |
199 | - | |
200 | 3 | |
201 | 4 | |
202 | 5 | |
203 | EOF | |
204 | compare_diff_patch expected out.tmp | |
205 | ' | |
206 | ||
207 | test_expect_success 'ignore-blank-lines: before change' ' | |
208 | cat <<-\EOF >x && | |
209 | 1 | |
210 | 2 | |
211 | ||
212 | 3 | |
213 | 4 | |
214 | 5 | |
215 | 6 | |
216 | 7 | |
217 | EOF | |
218 | git update-index x && | |
219 | cat <<-\EOF >x && | |
220 | ||
221 | 1 | |
222 | 2 | |
223 | 3 | |
224 | 4 | |
225 | 5 | |
226 | ||
227 | 6 | |
228 | 7 | |
229 | change | |
230 | EOF | |
231 | git diff --inter-hunk-context=100 --ignore-blank-lines >out.tmp && | |
232 | cat <<-\EOF >expected && | |
233 | diff --git a/x b/x | |
234 | --- a/x | |
235 | +++ b/x | |
236 | @@ -4,5 +4,7 @@ | |
237 | 3 | |
238 | 4 | |
239 | 5 | |
240 | + | |
241 | 6 | |
242 | 7 | |
243 | +change | |
244 | EOF | |
245 | compare_diff_patch expected out.tmp | |
246 | ' | |
247 | ||
248 | test_expect_success 'ignore-blank-lines: between changes' ' | |
249 | cat <<-\EOF >x && | |
250 | 1 | |
251 | 2 | |
252 | 3 | |
253 | 4 | |
254 | 5 | |
255 | ||
256 | ||
257 | 6 | |
258 | 7 | |
259 | 8 | |
260 | 9 | |
261 | 10 | |
262 | EOF | |
263 | git update-index x && | |
264 | cat <<-\EOF >x && | |
265 | change | |
266 | 1 | |
267 | 2 | |
268 | ||
269 | 3 | |
270 | 4 | |
271 | 5 | |
272 | 6 | |
273 | 7 | |
274 | 8 | |
275 | ||
276 | 9 | |
277 | 10 | |
278 | change | |
279 | EOF | |
280 | git diff --ignore-blank-lines >out.tmp && | |
281 | cat <<-\EOF >expected && | |
282 | diff --git a/x b/x | |
283 | --- a/x | |
284 | +++ b/x | |
285 | @@ -1,5 +1,7 @@ | |
286 | +change | |
287 | 1 | |
288 | 2 | |
289 | + | |
290 | 3 | |
291 | 4 | |
292 | 5 | |
293 | @@ -8,5 +8,7 @@ | |
294 | 6 | |
295 | 7 | |
296 | 8 | |
297 | + | |
298 | 9 | |
299 | 10 | |
300 | +change | |
301 | EOF | |
302 | compare_diff_patch expected out.tmp | |
303 | ' | |
304 | ||
305 | test_expect_success 'ignore-blank-lines: between changes (with interhunkctx)' ' | |
306 | test_seq 10 >x && | |
307 | git update-index x && | |
308 | cat <<-\EOF >x && | |
309 | change | |
310 | 1 | |
311 | 2 | |
312 | ||
313 | 3 | |
314 | 4 | |
315 | 5 | |
316 | ||
317 | 6 | |
318 | 7 | |
319 | 8 | |
320 | 9 | |
321 | ||
322 | 10 | |
323 | change | |
324 | EOF | |
325 | git diff --inter-hunk-context=2 --ignore-blank-lines >out.tmp && | |
326 | cat <<-\EOF >expected && | |
327 | diff --git a/x b/x | |
328 | --- a/x | |
329 | +++ b/x | |
330 | @@ -1,10 +1,15 @@ | |
331 | +change | |
332 | 1 | |
333 | 2 | |
334 | + | |
335 | 3 | |
336 | 4 | |
337 | 5 | |
338 | + | |
339 | 6 | |
340 | 7 | |
341 | 8 | |
342 | 9 | |
343 | + | |
344 | 10 | |
345 | +change | |
346 | EOF | |
347 | compare_diff_patch expected out.tmp | |
348 | ' | |
349 | ||
350 | test_expect_success 'ignore-blank-lines: scattered spaces' ' | |
351 | test_seq 10 >x && | |
352 | git update-index x && | |
353 | cat <<-\EOF >x && | |
354 | change | |
355 | 1 | |
356 | 2 | |
357 | 3 | |
358 | ||
359 | 4 | |
360 | ||
361 | 5 | |
362 | ||
363 | 6 | |
364 | ||
365 | ||
366 | 7 | |
367 | ||
368 | 8 | |
369 | 9 | |
370 | 10 | |
371 | change | |
372 | EOF | |
373 | git diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp && | |
374 | cat <<-\EOF >expected && | |
375 | diff --git a/x b/x | |
376 | --- a/x | |
377 | +++ b/x | |
378 | @@ -1,3 +1,4 @@ | |
379 | +change | |
380 | 1 | |
381 | 2 | |
382 | 3 | |
383 | @@ -8,3 +15,4 @@ | |
384 | 8 | |
385 | 9 | |
386 | 10 | |
387 | +change | |
388 | EOF | |
389 | compare_diff_patch expected out.tmp | |
390 | ' | |
391 | ||
392 | test_expect_success 'ignore-blank-lines: spaces coalesce' ' | |
393 | test_seq 6 >x && | |
394 | git update-index x && | |
395 | cat <<-\EOF >x && | |
396 | change | |
397 | 1 | |
398 | 2 | |
399 | 3 | |
400 | ||
401 | 4 | |
402 | ||
403 | 5 | |
404 | ||
405 | 6 | |
406 | change | |
407 | EOF | |
408 | git diff --inter-hunk-context=4 --ignore-blank-lines >out.tmp && | |
409 | cat <<-\EOF >expected && | |
410 | diff --git a/x b/x | |
411 | --- a/x | |
412 | +++ b/x | |
413 | @@ -1,6 +1,11 @@ | |
414 | +change | |
415 | 1 | |
416 | 2 | |
417 | 3 | |
418 | + | |
419 | 4 | |
420 | + | |
421 | 5 | |
422 | + | |
423 | 6 | |
424 | +change | |
425 | EOF | |
426 | compare_diff_patch expected out.tmp | |
427 | ' | |
428 | ||
429 | test_expect_success 'ignore-blank-lines: mix changes and blank lines' ' | |
430 | test_seq 16 >x && | |
431 | git update-index x && | |
432 | cat <<-\EOF >x && | |
433 | change | |
434 | 1 | |
435 | 2 | |
436 | ||
437 | 3 | |
438 | 4 | |
439 | 5 | |
440 | change | |
441 | 6 | |
442 | 7 | |
443 | 8 | |
444 | ||
445 | 9 | |
446 | 10 | |
447 | 11 | |
448 | change | |
449 | 12 | |
450 | 13 | |
451 | 14 | |
452 | ||
453 | 15 | |
454 | 16 | |
455 | change | |
456 | EOF | |
457 | git diff --ignore-blank-lines >out.tmp && | |
458 | cat <<-\EOF >expected && | |
459 | diff --git a/x b/x | |
460 | --- a/x | |
461 | +++ b/x | |
462 | @@ -1,8 +1,11 @@ | |
463 | +change | |
464 | 1 | |
465 | 2 | |
466 | + | |
467 | 3 | |
468 | 4 | |
469 | 5 | |
470 | +change | |
471 | 6 | |
472 | 7 | |
473 | 8 | |
474 | @@ -9,8 +13,11 @@ | |
475 | 9 | |
476 | 10 | |
477 | 11 | |
478 | +change | |
479 | 12 | |
480 | 13 | |
481 | 14 | |
482 | + | |
483 | 15 | |
484 | 16 | |
485 | +change | |
486 | EOF | |
487 | compare_diff_patch expected out.tmp | |
488 | ' | |
489 | ||
86f8c236 WC |
490 | test_expect_success 'check mixed spaces and tabs in indent' ' |
491 | ||
492 | # This is indented with SP HT SP. | |
493 | echo " foo();" > x && | |
420f4f04 | 494 | git diff --check | grep "space before tab in indent" |
86f8c236 WC |
495 | |
496 | ' | |
497 | ||
9afa2d4a BF |
498 | test_expect_success 'check mixed tabs and spaces in indent' ' |
499 | ||
500 | # This is indented with HT SP HT. | |
501 | echo " foo();" > x && | |
502 | git diff --check | grep "space before tab in indent" | |
503 | ||
504 | ' | |
505 | ||
62c64895 WC |
506 | test_expect_success 'check with no whitespace errors' ' |
507 | ||
508 | git commit -m "snapshot" && | |
509 | echo "foo();" > x && | |
510 | git diff --check | |
511 | ||
512 | ' | |
513 | ||
f8175466 | 514 | test_expect_success 'check with trailing whitespace' ' |
62c64895 WC |
515 | |
516 | echo "foo(); " > x && | |
d492b31c | 517 | test_must_fail git diff --check |
62c64895 WC |
518 | |
519 | ' | |
520 | ||
f8175466 | 521 | test_expect_success 'check with space before tab in indent' ' |
62c64895 WC |
522 | |
523 | # indent has space followed by hard tab | |
524 | echo " foo();" > x && | |
d492b31c | 525 | test_must_fail git diff --check |
62c64895 WC |
526 | |
527 | ' | |
528 | ||
da31b358 | 529 | test_expect_success '--check and --exit-code are not exclusive' ' |
62c64895 WC |
530 | |
531 | git checkout x && | |
532 | git diff --check --exit-code | |
533 | ||
534 | ' | |
535 | ||
da31b358 | 536 | test_expect_success '--check and --quiet are not exclusive' ' |
62c64895 WC |
537 | |
538 | git diff --check --quiet | |
539 | ||
540 | ' | |
541 | ||
542 | test_expect_success 'check staged with no whitespace errors' ' | |
543 | ||
544 | echo "foo();" > x && | |
545 | git add x && | |
546 | git diff --cached --check | |
547 | ||
548 | ' | |
549 | ||
f8175466 | 550 | test_expect_success 'check staged with trailing whitespace' ' |
62c64895 WC |
551 | |
552 | echo "foo(); " > x && | |
553 | git add x && | |
d492b31c | 554 | test_must_fail git diff --cached --check |
62c64895 WC |
555 | |
556 | ' | |
557 | ||
f8175466 | 558 | test_expect_success 'check staged with space before tab in indent' ' |
62c64895 WC |
559 | |
560 | # indent has space followed by hard tab | |
561 | echo " foo();" > x && | |
562 | git add x && | |
d492b31c | 563 | test_must_fail git diff --cached --check |
62c64895 WC |
564 | |
565 | ' | |
566 | ||
567 | test_expect_success 'check with no whitespace errors (diff-index)' ' | |
568 | ||
569 | echo "foo();" > x && | |
570 | git add x && | |
571 | git diff-index --check HEAD | |
572 | ||
573 | ' | |
574 | ||
f8175466 | 575 | test_expect_success 'check with trailing whitespace (diff-index)' ' |
62c64895 WC |
576 | |
577 | echo "foo(); " > x && | |
578 | git add x && | |
d492b31c | 579 | test_must_fail git diff-index --check HEAD |
62c64895 WC |
580 | |
581 | ' | |
582 | ||
f8175466 | 583 | test_expect_success 'check with space before tab in indent (diff-index)' ' |
62c64895 WC |
584 | |
585 | # indent has space followed by hard tab | |
586 | echo " foo();" > x && | |
587 | git add x && | |
d492b31c | 588 | test_must_fail git diff-index --check HEAD |
62c64895 WC |
589 | |
590 | ' | |
591 | ||
592 | test_expect_success 'check staged with no whitespace errors (diff-index)' ' | |
593 | ||
594 | echo "foo();" > x && | |
595 | git add x && | |
596 | git diff-index --cached --check HEAD | |
597 | ||
598 | ' | |
599 | ||
f8175466 | 600 | test_expect_success 'check staged with trailing whitespace (diff-index)' ' |
62c64895 WC |
601 | |
602 | echo "foo(); " > x && | |
603 | git add x && | |
d492b31c | 604 | test_must_fail git diff-index --cached --check HEAD |
62c64895 WC |
605 | |
606 | ' | |
607 | ||
f8175466 | 608 | test_expect_success 'check staged with space before tab in indent (diff-index)' ' |
62c64895 WC |
609 | |
610 | # indent has space followed by hard tab | |
611 | echo " foo();" > x && | |
612 | git add x && | |
d492b31c | 613 | test_must_fail git diff-index --cached --check HEAD |
62c64895 WC |
614 | |
615 | ' | |
616 | ||
617 | test_expect_success 'check with no whitespace errors (diff-tree)' ' | |
618 | ||
619 | echo "foo();" > x && | |
620 | git commit -m "new commit" x && | |
621 | git diff-tree --check HEAD^ HEAD | |
622 | ||
623 | ' | |
624 | ||
f8175466 | 625 | test_expect_success 'check with trailing whitespace (diff-tree)' ' |
62c64895 WC |
626 | |
627 | echo "foo(); " > x && | |
628 | git commit -m "another commit" x && | |
d492b31c | 629 | test_must_fail git diff-tree --check HEAD^ HEAD |
62c64895 WC |
630 | |
631 | ' | |
632 | ||
f8175466 | 633 | test_expect_success 'check with space before tab in indent (diff-tree)' ' |
62c64895 WC |
634 | |
635 | # indent has space followed by hard tab | |
636 | echo " foo();" > x && | |
637 | git commit -m "yet another" x && | |
d492b31c | 638 | test_must_fail git diff-tree --check HEAD^ HEAD |
f8175466 JH |
639 | |
640 | ' | |
641 | ||
642 | test_expect_success 'check trailing whitespace (trailing-space: off)' ' | |
643 | ||
644 | git config core.whitespace "-trailing-space" && | |
645 | echo "foo (); " > x && | |
646 | git diff --check | |
647 | ||
648 | ' | |
649 | ||
650 | test_expect_success 'check trailing whitespace (trailing-space: on)' ' | |
651 | ||
652 | git config core.whitespace "trailing-space" && | |
653 | echo "foo (); " > x && | |
d492b31c | 654 | test_must_fail git diff --check |
f8175466 JH |
655 | |
656 | ' | |
657 | ||
658 | test_expect_success 'check space before tab in indent (space-before-tab: off)' ' | |
659 | ||
660 | # indent contains space followed by HT | |
661 | git config core.whitespace "-space-before-tab" && | |
662 | echo " foo ();" > x && | |
663 | git diff --check | |
664 | ||
665 | ' | |
666 | ||
667 | test_expect_success 'check space before tab in indent (space-before-tab: on)' ' | |
668 | ||
669 | # indent contains space followed by HT | |
670 | git config core.whitespace "space-before-tab" && | |
671 | echo " foo (); " > x && | |
d492b31c | 672 | test_must_fail git diff --check |
f8175466 JH |
673 | |
674 | ' | |
675 | ||
676 | test_expect_success 'check spaces as indentation (indent-with-non-tab: off)' ' | |
677 | ||
a48fcd83 | 678 | git config core.whitespace "-indent-with-non-tab" && |
4d9697c7 | 679 | echo " foo ();" > x && |
f8175466 JH |
680 | git diff --check |
681 | ||
682 | ' | |
683 | ||
684 | test_expect_success 'check spaces as indentation (indent-with-non-tab: on)' ' | |
685 | ||
686 | git config core.whitespace "indent-with-non-tab" && | |
4d9697c7 | 687 | echo " foo ();" > x && |
d492b31c | 688 | test_must_fail git diff --check |
62c64895 WC |
689 | |
690 | ' | |
691 | ||
f4b05a49 JS |
692 | test_expect_success 'ditto, but tabwidth=9' ' |
693 | ||
694 | git config core.whitespace "indent-with-non-tab,tabwidth=9" && | |
695 | git diff --check | |
696 | ||
697 | ' | |
698 | ||
9afa2d4a BF |
699 | test_expect_success 'check tabs and spaces as indentation (indent-with-non-tab: on)' ' |
700 | ||
701 | git config core.whitespace "indent-with-non-tab" && | |
702 | echo " foo ();" > x && | |
d492b31c | 703 | test_must_fail git diff --check |
9afa2d4a BF |
704 | |
705 | ' | |
0ef617f4 | 706 | |
f4b05a49 JS |
707 | test_expect_success 'ditto, but tabwidth=10' ' |
708 | ||
709 | git config core.whitespace "indent-with-non-tab,tabwidth=10" && | |
710 | test_must_fail git diff --check | |
711 | ||
712 | ' | |
713 | ||
714 | test_expect_success 'ditto, but tabwidth=20' ' | |
715 | ||
716 | git config core.whitespace "indent-with-non-tab,tabwidth=20" && | |
717 | git diff --check | |
718 | ||
719 | ' | |
720 | ||
b27eb499 CW |
721 | test_expect_success 'check tabs as indentation (tab-in-indent: off)' ' |
722 | ||
723 | git config core.whitespace "-tab-in-indent" && | |
724 | echo " foo ();" > x && | |
725 | git diff --check | |
726 | ||
727 | ' | |
728 | ||
729 | test_expect_success 'check tabs as indentation (tab-in-indent: on)' ' | |
730 | ||
731 | git config core.whitespace "tab-in-indent" && | |
732 | echo " foo ();" > x && | |
733 | test_must_fail git diff --check | |
734 | ||
735 | ' | |
736 | ||
737 | test_expect_success 'check tabs and spaces as indentation (tab-in-indent: on)' ' | |
738 | ||
739 | git config core.whitespace "tab-in-indent" && | |
740 | echo " foo ();" > x && | |
741 | test_must_fail git diff --check | |
742 | ||
743 | ' | |
744 | ||
f4b05a49 JS |
745 | test_expect_success 'ditto, but tabwidth=1 (must be irrelevant)' ' |
746 | ||
747 | git config core.whitespace "tab-in-indent,tabwidth=1" && | |
748 | test_must_fail git diff --check | |
749 | ||
750 | ' | |
751 | ||
b27eb499 CW |
752 | test_expect_success 'check tab-in-indent and indent-with-non-tab conflict' ' |
753 | ||
754 | git config core.whitespace "tab-in-indent,indent-with-non-tab" && | |
755 | echo "foo ();" > x && | |
756 | test_must_fail git diff --check | |
757 | ||
758 | ' | |
759 | ||
760 | test_expect_success 'check tab-in-indent excluded from wildcard whitespace attribute' ' | |
761 | ||
762 | git config --unset core.whitespace && | |
763 | echo "x whitespace" > .gitattributes && | |
764 | echo " foo ();" > x && | |
765 | git diff --check && | |
766 | rm -f .gitattributes | |
767 | ||
768 | ' | |
769 | ||
0ef617f4 JH |
770 | test_expect_success 'line numbers in --check output are correct' ' |
771 | ||
772 | echo "" > x && | |
773 | echo "foo(); " >> x && | |
774 | git diff --check | grep "x:2:" | |
775 | ||
776 | ' | |
777 | ||
5b5061ef | 778 | test_expect_success 'checkdiff detects new trailing blank lines (1)' ' |
877f23cc JH |
779 | echo "foo();" >x && |
780 | echo "" >>x && | |
5b5061ef | 781 | git diff --check | grep "new blank line" |
877f23cc JH |
782 | ' |
783 | ||
467babf8 JH |
784 | test_expect_success 'checkdiff detects new trailing blank lines (2)' ' |
785 | { echo a; echo b; echo; echo; } >x && | |
786 | git add x && | |
787 | { echo a; echo; echo; echo; echo; } >x && | |
788 | git diff --check | grep "new blank line" | |
877f23cc JH |
789 | ' |
790 | ||
c35539eb JH |
791 | test_expect_success 'checkdiff allows new blank lines' ' |
792 | git checkout x && | |
793 | mv x y && | |
794 | ( | |
795 | echo "/* This is new */" && | |
796 | echo "" && | |
797 | cat y | |
798 | ) >x && | |
799 | git diff --check | |
800 | ' | |
801 | ||
3e97c7c6 GB |
802 | cat <<EOF >expect |
803 | EOF | |
804 | test_expect_success 'whitespace-only changes not reported' ' | |
805 | git reset --hard && | |
806 | echo >x "hello world" && | |
807 | git add x && | |
808 | git commit -m "hello 1" && | |
809 | echo >x "hello world" && | |
810 | git diff -b >actual && | |
811 | test_cmp expect actual | |
812 | ' | |
813 | ||
296c6bb2 CC |
814 | cat <<EOF >expect |
815 | diff --git a/x b/z | |
816 | similarity index NUM% | |
817 | rename from x | |
818 | rename to z | |
819 | index 380c32a..a97b785 100644 | |
820 | EOF | |
821 | test_expect_success 'whitespace-only changes reported across renames' ' | |
822 | git reset --hard && | |
823 | for i in 1 2 3 4 5 6 7 8 9; do echo "$i$i$i$i$i$i"; done >x && | |
824 | git add x && | |
825 | git commit -m "base" && | |
826 | sed -e "5s/^/ /" x >z && | |
827 | git rm x && | |
828 | git add z && | |
829 | git diff -w -M --cached | | |
830 | sed -e "/^similarity index /s/[0-9][0-9]*/NUM/" >actual && | |
831 | test_cmp expect actual | |
832 | ' | |
833 | ||
834 | cat >expected <<\EOF | |
835 | diff --git a/empty b/void | |
836 | similarity index 100% | |
837 | rename from empty | |
838 | rename to void | |
839 | EOF | |
840 | ||
841 | test_expect_success 'rename empty' ' | |
842 | git reset --hard && | |
843 | >empty && | |
844 | git add empty && | |
845 | git commit -m empty && | |
846 | git mv empty void && | |
847 | git diff -w --cached -M >current && | |
848 | test_cmp expected current | |
849 | ' | |
850 | ||
5e568f9e AG |
851 | test_expect_success 'combined diff with autocrlf conversion' ' |
852 | ||
853 | git reset --hard && | |
854 | echo >x hello && | |
855 | git commit -m "one side" x && | |
856 | git checkout HEAD^ && | |
857 | echo >x goodbye && | |
858 | git commit -m "the other side" x && | |
859 | git config core.autocrlf true && | |
860 | test_must_fail git merge master && | |
861 | ||
862 | git diff | sed -e "1,/^@@@/d" >actual && | |
863 | ! grep "^-" actual | |
864 | ||
865 | ' | |
866 | ||
cfd1a984 KB |
867 | # Start testing the colored format for whitespace checks |
868 | ||
869 | test_expect_success 'setup diff colors' ' | |
870 | git config color.diff always && | |
871 | git config color.diff.plain normal && | |
872 | git config color.diff.meta bold && | |
873 | git config color.diff.frag cyan && | |
874 | git config color.diff.func normal && | |
875 | git config color.diff.old red && | |
876 | git config color.diff.new green && | |
877 | git config color.diff.commit yellow && | |
878 | git config color.diff.whitespace "normal red" && | |
879 | ||
880 | git config core.autocrlf false | |
881 | ' | |
882 | cat >expected <<\EOF | |
883 | <BOLD>diff --git a/x b/x<RESET> | |
884 | <BOLD>index 9daeafb..2874b91 100644<RESET> | |
885 | <BOLD>--- a/x<RESET> | |
886 | <BOLD>+++ b/x<RESET> | |
887 | <CYAN>@@ -1 +1,4 @@<RESET> | |
888 | test<RESET> | |
889 | <GREEN>+<RESET><GREEN>{<RESET> | |
890 | <GREEN>+<RESET><BRED> <RESET> | |
891 | <GREEN>+<RESET><GREEN>}<RESET> | |
892 | EOF | |
893 | ||
894 | test_expect_success 'diff that introduces a line with only tabs' ' | |
895 | git config core.whitespace blank-at-eol && | |
896 | git reset --hard && | |
897 | echo "test" > x && | |
898 | git commit -m "initial" x && | |
899 | echo "{NTN}" | tr "NT" "\n\t" >> x && | |
900 | git -c color.diff=always diff | test_decode_color >current && | |
901 | test_cmp expected current | |
902 | ' | |
903 | ||
2344d47f | 904 | test_done |