]> git.ipfire.org Git - thirdparty/git.git/blob - t/t4047-diff-dirstat.sh
path.c: don't call the match function without value in trie_find()
[thirdparty/git.git] / t / t4047-diff-dirstat.sh
1 #!/bin/sh
2
3 test_description='diff --dirstat tests'
4 . ./test-lib.sh
5
6 # set up two commits where the second commit has these files
7 # (10 lines in each file):
8 #
9 # unchanged/text (unchanged from 1st commit)
10 # changed/text (changed 1st line)
11 # rearranged/text (swapped 1st and 2nd line)
12 # dst/copy/unchanged/text (copied from src/copy/unchanged/text, unchanged)
13 # dst/copy/changed/text (copied from src/copy/changed/text, changed)
14 # dst/copy/rearranged/text (copied from src/copy/rearranged/text, rearranged)
15 # dst/move/unchanged/text (moved from src/move/unchanged/text, unchanged)
16 # dst/move/changed/text (moved from src/move/changed/text, changed)
17 # dst/move/rearranged/text (moved from src/move/rearranged/text, rearranged)
18
19 test_expect_success 'setup' '
20 mkdir unchanged &&
21 mkdir changed &&
22 mkdir rearranged &&
23 mkdir src &&
24 mkdir src/copy &&
25 mkdir src/copy/unchanged &&
26 mkdir src/copy/changed &&
27 mkdir src/copy/rearranged &&
28 mkdir src/move &&
29 mkdir src/move/unchanged &&
30 mkdir src/move/changed &&
31 mkdir src/move/rearranged &&
32 cat <<EOF >unchanged/text &&
33 unchanged line #0
34 unchanged line #1
35 unchanged line #2
36 unchanged line #3
37 unchanged line #4
38 unchanged line #5
39 unchanged line #6
40 unchanged line #7
41 unchanged line #8
42 unchanged line #9
43 EOF
44 cat <<EOF >changed/text &&
45 changed line #0
46 changed line #1
47 changed line #2
48 changed line #3
49 changed line #4
50 changed line #5
51 changed line #6
52 changed line #7
53 changed line #8
54 changed line #9
55 EOF
56 cat <<EOF >rearranged/text &&
57 rearranged line #0
58 rearranged line #1
59 rearranged line #2
60 rearranged line #3
61 rearranged line #4
62 rearranged line #5
63 rearranged line #6
64 rearranged line #7
65 rearranged line #8
66 rearranged line #9
67 EOF
68 cat <<EOF >src/copy/unchanged/text &&
69 copy unchanged line #0
70 copy unchanged line #1
71 copy unchanged line #2
72 copy unchanged line #3
73 copy unchanged line #4
74 copy unchanged line #5
75 copy unchanged line #6
76 copy unchanged line #7
77 copy unchanged line #8
78 copy unchanged line #9
79 EOF
80 cat <<EOF >src/copy/changed/text &&
81 copy changed line #0
82 copy changed line #1
83 copy changed line #2
84 copy changed line #3
85 copy changed line #4
86 copy changed line #5
87 copy changed line #6
88 copy changed line #7
89 copy changed line #8
90 copy changed line #9
91 EOF
92 cat <<EOF >src/copy/rearranged/text &&
93 copy rearranged line #0
94 copy rearranged line #1
95 copy rearranged line #2
96 copy rearranged line #3
97 copy rearranged line #4
98 copy rearranged line #5
99 copy rearranged line #6
100 copy rearranged line #7
101 copy rearranged line #8
102 copy rearranged line #9
103 EOF
104 cat <<EOF >src/move/unchanged/text &&
105 move unchanged line #0
106 move unchanged line #1
107 move unchanged line #2
108 move unchanged line #3
109 move unchanged line #4
110 move unchanged line #5
111 move unchanged line #6
112 move unchanged line #7
113 move unchanged line #8
114 move unchanged line #9
115 EOF
116 cat <<EOF >src/move/changed/text &&
117 move changed line #0
118 move changed line #1
119 move changed line #2
120 move changed line #3
121 move changed line #4
122 move changed line #5
123 move changed line #6
124 move changed line #7
125 move changed line #8
126 move changed line #9
127 EOF
128 cat <<EOF >src/move/rearranged/text &&
129 move rearranged line #0
130 move rearranged line #1
131 move rearranged line #2
132 move rearranged line #3
133 move rearranged line #4
134 move rearranged line #5
135 move rearranged line #6
136 move rearranged line #7
137 move rearranged line #8
138 move rearranged line #9
139 EOF
140 git add . &&
141 git commit -m "initial" &&
142 mkdir dst &&
143 mkdir dst/copy &&
144 mkdir dst/copy/unchanged &&
145 mkdir dst/copy/changed &&
146 mkdir dst/copy/rearranged &&
147 mkdir dst/move &&
148 mkdir dst/move/unchanged &&
149 mkdir dst/move/changed &&
150 mkdir dst/move/rearranged &&
151 cat <<EOF >changed/text &&
152 CHANGED XXXXXXX line #0
153 changed line #1
154 changed line #2
155 changed line #3
156 changed line #4
157 changed line #5
158 changed line #6
159 changed line #7
160 changed line #8
161 changed line #9
162 EOF
163 cat <<EOF >rearranged/text &&
164 rearranged line #1
165 rearranged line #0
166 rearranged line #2
167 rearranged line #3
168 rearranged line #4
169 rearranged line #5
170 rearranged line #6
171 rearranged line #7
172 rearranged line #8
173 rearranged line #9
174 EOF
175 cat <<EOF >dst/copy/unchanged/text &&
176 copy unchanged line #0
177 copy unchanged line #1
178 copy unchanged line #2
179 copy unchanged line #3
180 copy unchanged line #4
181 copy unchanged line #5
182 copy unchanged line #6
183 copy unchanged line #7
184 copy unchanged line #8
185 copy unchanged line #9
186 EOF
187 cat <<EOF >dst/copy/changed/text &&
188 copy XXXCHANGED line #0
189 copy changed line #1
190 copy changed line #2
191 copy changed line #3
192 copy changed line #4
193 copy changed line #5
194 copy changed line #6
195 copy changed line #7
196 copy changed line #8
197 copy changed line #9
198 EOF
199 cat <<EOF >dst/copy/rearranged/text &&
200 copy rearranged line #1
201 copy rearranged line #0
202 copy rearranged line #2
203 copy rearranged line #3
204 copy rearranged line #4
205 copy rearranged line #5
206 copy rearranged line #6
207 copy rearranged line #7
208 copy rearranged line #8
209 copy rearranged line #9
210 EOF
211 cat <<EOF >dst/move/unchanged/text &&
212 move unchanged line #0
213 move unchanged line #1
214 move unchanged line #2
215 move unchanged line #3
216 move unchanged line #4
217 move unchanged line #5
218 move unchanged line #6
219 move unchanged line #7
220 move unchanged line #8
221 move unchanged line #9
222 EOF
223 cat <<EOF >dst/move/changed/text &&
224 move XXXCHANGED line #0
225 move changed line #1
226 move changed line #2
227 move changed line #3
228 move changed line #4
229 move changed line #5
230 move changed line #6
231 move changed line #7
232 move changed line #8
233 move changed line #9
234 EOF
235 cat <<EOF >dst/move/rearranged/text &&
236 move rearranged line #1
237 move rearranged line #0
238 move rearranged line #2
239 move rearranged line #3
240 move rearranged line #4
241 move rearranged line #5
242 move rearranged line #6
243 move rearranged line #7
244 move rearranged line #8
245 move rearranged line #9
246 EOF
247 git add . &&
248 git rm -r src/move/unchanged &&
249 git rm -r src/move/changed &&
250 git rm -r src/move/rearranged &&
251 git commit -m "changes" &&
252 git config diff.renames false
253 '
254
255 cat <<EOF >expect_diff_stat
256 1 1 changed/text
257 10 0 dst/copy/changed/text
258 10 0 dst/copy/rearranged/text
259 10 0 dst/copy/unchanged/text
260 10 0 dst/move/changed/text
261 10 0 dst/move/rearranged/text
262 10 0 dst/move/unchanged/text
263 1 1 rearranged/text
264 0 10 src/move/changed/text
265 0 10 src/move/rearranged/text
266 0 10 src/move/unchanged/text
267 EOF
268
269 cat <<EOF >expect_diff_stat_M
270 1 1 changed/text
271 10 0 dst/copy/changed/text
272 10 0 dst/copy/rearranged/text
273 10 0 dst/copy/unchanged/text
274 1 1 {src => dst}/move/changed/text
275 1 1 {src => dst}/move/rearranged/text
276 0 0 {src => dst}/move/unchanged/text
277 1 1 rearranged/text
278 EOF
279
280 cat <<EOF >expect_diff_stat_CC
281 1 1 changed/text
282 1 1 {src => dst}/copy/changed/text
283 1 1 {src => dst}/copy/rearranged/text
284 0 0 {src => dst}/copy/unchanged/text
285 1 1 {src => dst}/move/changed/text
286 1 1 {src => dst}/move/rearranged/text
287 0 0 {src => dst}/move/unchanged/text
288 1 1 rearranged/text
289 EOF
290
291 test_expect_success 'sanity check setup (--numstat)' '
292 git diff --numstat HEAD^..HEAD >actual_diff_stat &&
293 test_cmp expect_diff_stat actual_diff_stat &&
294 git diff --numstat -M HEAD^..HEAD >actual_diff_stat_M &&
295 test_cmp expect_diff_stat_M actual_diff_stat_M &&
296 git diff --numstat -C -C HEAD^..HEAD >actual_diff_stat_CC &&
297 test_cmp expect_diff_stat_CC actual_diff_stat_CC
298 '
299
300 # changed/text and rearranged/text falls below default 3% threshold
301 cat <<EOF >expect_diff_dirstat
302 10.8% dst/copy/changed/
303 10.8% dst/copy/rearranged/
304 10.8% dst/copy/unchanged/
305 10.8% dst/move/changed/
306 10.8% dst/move/rearranged/
307 10.8% dst/move/unchanged/
308 10.8% src/move/changed/
309 10.8% src/move/rearranged/
310 10.8% src/move/unchanged/
311 EOF
312
313 # rearranged/text falls below default 3% threshold
314 cat <<EOF >expect_diff_dirstat_M
315 5.8% changed/
316 29.3% dst/copy/changed/
317 29.3% dst/copy/rearranged/
318 29.3% dst/copy/unchanged/
319 5.8% dst/move/changed/
320 EOF
321
322 # rearranged/text falls below default 3% threshold
323 cat <<EOF >expect_diff_dirstat_CC
324 32.6% changed/
325 32.6% dst/copy/changed/
326 32.6% dst/move/changed/
327 EOF
328
329 test_expect_success 'various ways to misspell --dirstat' '
330 test_must_fail git show --dirstat10 &&
331 test_must_fail git show --dirstat10,files &&
332 test_must_fail git show -X=20 &&
333 test_must_fail git show -X=20,cumulative
334 '
335
336 test_expect_success 'vanilla --dirstat' '
337 git diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
338 test_cmp expect_diff_dirstat actual_diff_dirstat &&
339 git diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
340 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
341 git diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
342 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
343 '
344
345 test_expect_success 'vanilla -X' '
346 git diff -X HEAD^..HEAD >actual_diff_dirstat &&
347 test_cmp expect_diff_dirstat actual_diff_dirstat &&
348 git diff -X -M HEAD^..HEAD >actual_diff_dirstat_M &&
349 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
350 git diff -X -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
351 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
352 '
353
354 test_expect_success 'explicit defaults: --dirstat=changes,noncumulative,3' '
355 git diff --dirstat=changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
356 test_cmp expect_diff_dirstat actual_diff_dirstat &&
357 git diff --dirstat=changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
358 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
359 git diff --dirstat=changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
360 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
361 '
362
363 test_expect_success 'explicit defaults: -Xchanges,noncumulative,3' '
364 git diff -Xchanges,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
365 test_cmp expect_diff_dirstat actual_diff_dirstat &&
366 git diff -Xchanges,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
367 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
368 git diff -Xchanges,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
369 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
370 '
371
372 test_expect_success 'later options override earlier options:' '
373 git diff --dirstat=files,10,cumulative,changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
374 test_cmp expect_diff_dirstat actual_diff_dirstat &&
375 git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
376 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
377 git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
378 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC &&
379 git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 HEAD^..HEAD >actual_diff_dirstat &&
380 test_cmp expect_diff_dirstat actual_diff_dirstat &&
381 git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
382 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
383 git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
384 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
385 '
386
387 test_expect_success 'non-defaults in config overridden by explicit defaults on command line' '
388 git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 HEAD^..HEAD >actual_diff_dirstat &&
389 test_cmp expect_diff_dirstat actual_diff_dirstat &&
390 git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M &&
391 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
392 git -c diff.dirstat=files,cumulative,50 diff --dirstat=changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
393 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
394 '
395
396 cat <<EOF >expect_diff_dirstat
397 2.1% changed/
398 10.8% dst/copy/changed/
399 10.8% dst/copy/rearranged/
400 10.8% dst/copy/unchanged/
401 10.8% dst/move/changed/
402 10.8% dst/move/rearranged/
403 10.8% dst/move/unchanged/
404 0.0% rearranged/
405 10.8% src/move/changed/
406 10.8% src/move/rearranged/
407 10.8% src/move/unchanged/
408 EOF
409
410 cat <<EOF >expect_diff_dirstat_M
411 5.8% changed/
412 29.3% dst/copy/changed/
413 29.3% dst/copy/rearranged/
414 29.3% dst/copy/unchanged/
415 5.8% dst/move/changed/
416 0.1% dst/move/rearranged/
417 0.1% rearranged/
418 EOF
419
420 cat <<EOF >expect_diff_dirstat_CC
421 32.6% changed/
422 32.6% dst/copy/changed/
423 0.6% dst/copy/rearranged/
424 32.6% dst/move/changed/
425 0.6% dst/move/rearranged/
426 0.6% rearranged/
427 EOF
428
429 test_expect_success '--dirstat=0' '
430 git diff --dirstat=0 HEAD^..HEAD >actual_diff_dirstat &&
431 test_cmp expect_diff_dirstat actual_diff_dirstat &&
432 git diff --dirstat=0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
433 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
434 git diff --dirstat=0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
435 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
436 '
437
438 test_expect_success '-X0' '
439 git diff -X0 HEAD^..HEAD >actual_diff_dirstat &&
440 test_cmp expect_diff_dirstat actual_diff_dirstat &&
441 git diff -X0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
442 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
443 git diff -X0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
444 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
445 '
446
447 test_expect_success 'diff.dirstat=0' '
448 git -c diff.dirstat=0 diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
449 test_cmp expect_diff_dirstat actual_diff_dirstat &&
450 git -c diff.dirstat=0 diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
451 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
452 git -c diff.dirstat=0 diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
453 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
454 '
455
456 cat <<EOF >expect_diff_dirstat
457 2.1% changed/
458 10.8% dst/copy/changed/
459 10.8% dst/copy/rearranged/
460 10.8% dst/copy/unchanged/
461 32.5% dst/copy/
462 10.8% dst/move/changed/
463 10.8% dst/move/rearranged/
464 10.8% dst/move/unchanged/
465 32.5% dst/move/
466 65.1% dst/
467 0.0% rearranged/
468 10.8% src/move/changed/
469 10.8% src/move/rearranged/
470 10.8% src/move/unchanged/
471 32.5% src/move/
472 EOF
473
474 cat <<EOF >expect_diff_dirstat_M
475 5.8% changed/
476 29.3% dst/copy/changed/
477 29.3% dst/copy/rearranged/
478 29.3% dst/copy/unchanged/
479 88.0% dst/copy/
480 5.8% dst/move/changed/
481 0.1% dst/move/rearranged/
482 5.9% dst/move/
483 94.0% dst/
484 0.1% rearranged/
485 EOF
486
487 cat <<EOF >expect_diff_dirstat_CC
488 32.6% changed/
489 32.6% dst/copy/changed/
490 0.6% dst/copy/rearranged/
491 33.3% dst/copy/
492 32.6% dst/move/changed/
493 0.6% dst/move/rearranged/
494 33.3% dst/move/
495 66.6% dst/
496 0.6% rearranged/
497 EOF
498
499 test_expect_success '--dirstat=0 --cumulative' '
500 git diff --dirstat=0 --cumulative HEAD^..HEAD >actual_diff_dirstat &&
501 test_cmp expect_diff_dirstat actual_diff_dirstat &&
502 git diff --dirstat=0 --cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
503 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
504 git diff --dirstat=0 --cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
505 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
506 '
507
508 test_expect_success '--dirstat=0,cumulative' '
509 git diff --dirstat=0,cumulative HEAD^..HEAD >actual_diff_dirstat &&
510 test_cmp expect_diff_dirstat actual_diff_dirstat &&
511 git diff --dirstat=0,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
512 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
513 git diff --dirstat=0,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
514 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
515 '
516
517 test_expect_success '-X0,cumulative' '
518 git diff -X0,cumulative HEAD^..HEAD >actual_diff_dirstat &&
519 test_cmp expect_diff_dirstat actual_diff_dirstat &&
520 git diff -X0,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
521 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
522 git diff -X0,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
523 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
524 '
525
526 test_expect_success 'diff.dirstat=0,cumulative' '
527 git -c diff.dirstat=0,cumulative diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
528 test_cmp expect_diff_dirstat actual_diff_dirstat &&
529 git -c diff.dirstat=0,cumulative diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
530 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
531 git -c diff.dirstat=0,cumulative diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
532 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
533 '
534
535 test_expect_success 'diff.dirstat=0 & --dirstat=cumulative' '
536 git -c diff.dirstat=0 diff --dirstat=cumulative HEAD^..HEAD >actual_diff_dirstat &&
537 test_cmp expect_diff_dirstat actual_diff_dirstat &&
538 git -c diff.dirstat=0 diff --dirstat=cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
539 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
540 git -c diff.dirstat=0 diff --dirstat=cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
541 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
542 '
543
544 cat <<EOF >expect_diff_dirstat
545 9.0% changed/
546 9.0% dst/copy/changed/
547 9.0% dst/copy/rearranged/
548 9.0% dst/copy/unchanged/
549 9.0% dst/move/changed/
550 9.0% dst/move/rearranged/
551 9.0% dst/move/unchanged/
552 9.0% rearranged/
553 9.0% src/move/changed/
554 9.0% src/move/rearranged/
555 9.0% src/move/unchanged/
556 EOF
557
558 cat <<EOF >expect_diff_dirstat_M
559 14.2% changed/
560 14.2% dst/copy/changed/
561 14.2% dst/copy/rearranged/
562 14.2% dst/copy/unchanged/
563 14.2% dst/move/changed/
564 14.2% dst/move/rearranged/
565 14.2% rearranged/
566 EOF
567
568 cat <<EOF >expect_diff_dirstat_CC
569 16.6% changed/
570 16.6% dst/copy/changed/
571 16.6% dst/copy/rearranged/
572 16.6% dst/move/changed/
573 16.6% dst/move/rearranged/
574 16.6% rearranged/
575 EOF
576
577 test_expect_success '--dirstat-by-file' '
578 git diff --dirstat-by-file HEAD^..HEAD >actual_diff_dirstat &&
579 test_cmp expect_diff_dirstat actual_diff_dirstat &&
580 git diff --dirstat-by-file -M HEAD^..HEAD >actual_diff_dirstat_M &&
581 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
582 git diff --dirstat-by-file -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
583 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
584 '
585
586 test_expect_success '--dirstat=files' '
587 git diff --dirstat=files HEAD^..HEAD >actual_diff_dirstat &&
588 test_cmp expect_diff_dirstat actual_diff_dirstat &&
589 git diff --dirstat=files -M HEAD^..HEAD >actual_diff_dirstat_M &&
590 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
591 git diff --dirstat=files -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
592 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
593 '
594
595 test_expect_success 'diff.dirstat=files' '
596 git -c diff.dirstat=files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
597 test_cmp expect_diff_dirstat actual_diff_dirstat &&
598 git -c diff.dirstat=files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
599 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
600 git -c diff.dirstat=files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
601 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
602 '
603
604 cat <<EOF >expect_diff_dirstat
605 27.2% dst/copy/
606 27.2% dst/move/
607 27.2% src/move/
608 EOF
609
610 cat <<EOF >expect_diff_dirstat_M
611 14.2% changed/
612 14.2% dst/copy/changed/
613 14.2% dst/copy/rearranged/
614 14.2% dst/copy/unchanged/
615 14.2% dst/move/changed/
616 14.2% dst/move/rearranged/
617 14.2% rearranged/
618 EOF
619
620 cat <<EOF >expect_diff_dirstat_CC
621 16.6% changed/
622 16.6% dst/copy/changed/
623 16.6% dst/copy/rearranged/
624 16.6% dst/move/changed/
625 16.6% dst/move/rearranged/
626 16.6% rearranged/
627 EOF
628
629 test_expect_success '--dirstat-by-file=10' '
630 git diff --dirstat-by-file=10 HEAD^..HEAD >actual_diff_dirstat &&
631 test_cmp expect_diff_dirstat actual_diff_dirstat &&
632 git diff --dirstat-by-file=10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
633 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
634 git diff --dirstat-by-file=10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
635 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
636 '
637
638 test_expect_success '--dirstat=files,10' '
639 git diff --dirstat=files,10 HEAD^..HEAD >actual_diff_dirstat &&
640 test_cmp expect_diff_dirstat actual_diff_dirstat &&
641 git diff --dirstat=files,10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
642 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
643 git diff --dirstat=files,10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
644 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
645 '
646
647 test_expect_success 'diff.dirstat=10,files' '
648 git -c diff.dirstat=10,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
649 test_cmp expect_diff_dirstat actual_diff_dirstat &&
650 git -c diff.dirstat=10,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
651 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
652 git -c diff.dirstat=10,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
653 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
654 '
655
656 cat <<EOF >expect_diff_dirstat
657 9.0% changed/
658 9.0% dst/copy/changed/
659 9.0% dst/copy/rearranged/
660 9.0% dst/copy/unchanged/
661 27.2% dst/copy/
662 9.0% dst/move/changed/
663 9.0% dst/move/rearranged/
664 9.0% dst/move/unchanged/
665 27.2% dst/move/
666 54.5% dst/
667 9.0% rearranged/
668 9.0% src/move/changed/
669 9.0% src/move/rearranged/
670 9.0% src/move/unchanged/
671 27.2% src/move/
672 EOF
673
674 cat <<EOF >expect_diff_dirstat_M
675 14.2% changed/
676 14.2% dst/copy/changed/
677 14.2% dst/copy/rearranged/
678 14.2% dst/copy/unchanged/
679 42.8% dst/copy/
680 14.2% dst/move/changed/
681 14.2% dst/move/rearranged/
682 28.5% dst/move/
683 71.4% dst/
684 14.2% rearranged/
685 EOF
686
687 cat <<EOF >expect_diff_dirstat_CC
688 16.6% changed/
689 16.6% dst/copy/changed/
690 16.6% dst/copy/rearranged/
691 33.3% dst/copy/
692 16.6% dst/move/changed/
693 16.6% dst/move/rearranged/
694 33.3% dst/move/
695 66.6% dst/
696 16.6% rearranged/
697 EOF
698
699 test_expect_success '--dirstat-by-file --cumulative' '
700 git diff --dirstat-by-file --cumulative HEAD^..HEAD >actual_diff_dirstat &&
701 test_cmp expect_diff_dirstat actual_diff_dirstat &&
702 git diff --dirstat-by-file --cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
703 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
704 git diff --dirstat-by-file --cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
705 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
706 '
707
708 test_expect_success '--dirstat=files,cumulative' '
709 git diff --dirstat=files,cumulative HEAD^..HEAD >actual_diff_dirstat &&
710 test_cmp expect_diff_dirstat actual_diff_dirstat &&
711 git diff --dirstat=files,cumulative -M HEAD^..HEAD >actual_diff_dirstat_M &&
712 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
713 git diff --dirstat=files,cumulative -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
714 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
715 '
716
717 test_expect_success 'diff.dirstat=cumulative,files' '
718 git -c diff.dirstat=cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
719 test_cmp expect_diff_dirstat actual_diff_dirstat &&
720 git -c diff.dirstat=cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
721 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
722 git -c diff.dirstat=cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
723 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
724 '
725
726 cat <<EOF >expect_diff_dirstat
727 27.2% dst/copy/
728 27.2% dst/move/
729 54.5% dst/
730 27.2% src/move/
731 EOF
732
733 cat <<EOF >expect_diff_dirstat_M
734 14.2% changed/
735 14.2% dst/copy/changed/
736 14.2% dst/copy/rearranged/
737 14.2% dst/copy/unchanged/
738 42.8% dst/copy/
739 14.2% dst/move/changed/
740 14.2% dst/move/rearranged/
741 28.5% dst/move/
742 71.4% dst/
743 14.2% rearranged/
744 EOF
745
746 cat <<EOF >expect_diff_dirstat_CC
747 16.6% changed/
748 16.6% dst/copy/changed/
749 16.6% dst/copy/rearranged/
750 33.3% dst/copy/
751 16.6% dst/move/changed/
752 16.6% dst/move/rearranged/
753 33.3% dst/move/
754 66.6% dst/
755 16.6% rearranged/
756 EOF
757
758 test_expect_success '--dirstat=files,cumulative,10' '
759 git diff --dirstat=files,cumulative,10 HEAD^..HEAD >actual_diff_dirstat &&
760 test_cmp expect_diff_dirstat actual_diff_dirstat &&
761 git diff --dirstat=files,cumulative,10 -M HEAD^..HEAD >actual_diff_dirstat_M &&
762 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
763 git diff --dirstat=files,cumulative,10 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
764 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
765 '
766
767 test_expect_success 'diff.dirstat=10,cumulative,files' '
768 git -c diff.dirstat=10,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
769 test_cmp expect_diff_dirstat actual_diff_dirstat &&
770 git -c diff.dirstat=10,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
771 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
772 git -c diff.dirstat=10,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
773 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
774 '
775
776 cat <<EOF >expect_diff_dirstat
777 27.2% dst/copy/
778 27.2% dst/move/
779 54.5% dst/
780 27.2% src/move/
781 EOF
782
783 cat <<EOF >expect_diff_dirstat_M
784 42.8% dst/copy/
785 28.5% dst/move/
786 71.4% dst/
787 EOF
788
789 cat <<EOF >expect_diff_dirstat_CC
790 33.3% dst/copy/
791 33.3% dst/move/
792 66.6% dst/
793 EOF
794
795 test_expect_success '--dirstat=files,cumulative,16.7' '
796 git diff --dirstat=files,cumulative,16.7 HEAD^..HEAD >actual_diff_dirstat &&
797 test_cmp expect_diff_dirstat actual_diff_dirstat &&
798 git diff --dirstat=files,cumulative,16.7 -M HEAD^..HEAD >actual_diff_dirstat_M &&
799 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
800 git diff --dirstat=files,cumulative,16.7 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
801 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
802 '
803
804 test_expect_success 'diff.dirstat=16.7,cumulative,files' '
805 git -c diff.dirstat=16.7,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
806 test_cmp expect_diff_dirstat actual_diff_dirstat &&
807 git -c diff.dirstat=16.7,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
808 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
809 git -c diff.dirstat=16.7,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
810 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
811 '
812
813 test_expect_success 'diff.dirstat=16.70,cumulative,files' '
814 git -c diff.dirstat=16.70,cumulative,files diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
815 test_cmp expect_diff_dirstat actual_diff_dirstat &&
816 git -c diff.dirstat=16.70,cumulative,files diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
817 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
818 git -c diff.dirstat=16.70,cumulative,files diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
819 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
820 '
821
822 test_expect_success '--dirstat=files,cumulative,27.2' '
823 git diff --dirstat=files,cumulative,27.2 HEAD^..HEAD >actual_diff_dirstat &&
824 test_cmp expect_diff_dirstat actual_diff_dirstat &&
825 git diff --dirstat=files,cumulative,27.2 -M HEAD^..HEAD >actual_diff_dirstat_M &&
826 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
827 git diff --dirstat=files,cumulative,27.2 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
828 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
829 '
830
831 test_expect_success '--dirstat=files,cumulative,27.09' '
832 git diff --dirstat=files,cumulative,27.09 HEAD^..HEAD >actual_diff_dirstat &&
833 test_cmp expect_diff_dirstat actual_diff_dirstat &&
834 git diff --dirstat=files,cumulative,27.09 -M HEAD^..HEAD >actual_diff_dirstat_M &&
835 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
836 git diff --dirstat=files,cumulative,27.09 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
837 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
838 '
839
840 cat <<EOF >expect_diff_dirstat
841 10.6% dst/copy/changed/
842 10.6% dst/copy/rearranged/
843 10.6% dst/copy/unchanged/
844 10.6% dst/move/changed/
845 10.6% dst/move/rearranged/
846 10.6% dst/move/unchanged/
847 10.6% src/move/changed/
848 10.6% src/move/rearranged/
849 10.6% src/move/unchanged/
850 EOF
851
852 cat <<EOF >expect_diff_dirstat_M
853 5.2% changed/
854 26.3% dst/copy/changed/
855 26.3% dst/copy/rearranged/
856 26.3% dst/copy/unchanged/
857 5.2% dst/move/changed/
858 5.2% dst/move/rearranged/
859 5.2% rearranged/
860 EOF
861
862 cat <<EOF >expect_diff_dirstat_CC
863 16.6% changed/
864 16.6% dst/copy/changed/
865 16.6% dst/copy/rearranged/
866 16.6% dst/move/changed/
867 16.6% dst/move/rearranged/
868 16.6% rearranged/
869 EOF
870
871 test_expect_success '--dirstat=lines' '
872 git diff --dirstat=lines HEAD^..HEAD >actual_diff_dirstat &&
873 test_cmp expect_diff_dirstat actual_diff_dirstat &&
874 git diff --dirstat=lines -M HEAD^..HEAD >actual_diff_dirstat_M &&
875 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
876 git diff --dirstat=lines -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
877 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
878 '
879
880 test_expect_success 'diff.dirstat=lines' '
881 git -c diff.dirstat=lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
882 test_cmp expect_diff_dirstat actual_diff_dirstat &&
883 git -c diff.dirstat=lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
884 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
885 git -c diff.dirstat=lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
886 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
887 '
888
889 cat <<EOF >expect_diff_dirstat
890 2.1% changed/
891 10.6% dst/copy/changed/
892 10.6% dst/copy/rearranged/
893 10.6% dst/copy/unchanged/
894 10.6% dst/move/changed/
895 10.6% dst/move/rearranged/
896 10.6% dst/move/unchanged/
897 2.1% rearranged/
898 10.6% src/move/changed/
899 10.6% src/move/rearranged/
900 10.6% src/move/unchanged/
901 EOF
902
903 cat <<EOF >expect_diff_dirstat_M
904 5.2% changed/
905 26.3% dst/copy/changed/
906 26.3% dst/copy/rearranged/
907 26.3% dst/copy/unchanged/
908 5.2% dst/move/changed/
909 5.2% dst/move/rearranged/
910 5.2% rearranged/
911 EOF
912
913 cat <<EOF >expect_diff_dirstat_CC
914 16.6% changed/
915 16.6% dst/copy/changed/
916 16.6% dst/copy/rearranged/
917 16.6% dst/move/changed/
918 16.6% dst/move/rearranged/
919 16.6% rearranged/
920 EOF
921
922 test_expect_success '--dirstat=lines,0' '
923 git diff --dirstat=lines,0 HEAD^..HEAD >actual_diff_dirstat &&
924 test_cmp expect_diff_dirstat actual_diff_dirstat &&
925 git diff --dirstat=lines,0 -M HEAD^..HEAD >actual_diff_dirstat_M &&
926 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
927 git diff --dirstat=lines,0 -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
928 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
929 '
930
931 test_expect_success 'diff.dirstat=0,lines' '
932 git -c diff.dirstat=0,lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat &&
933 test_cmp expect_diff_dirstat actual_diff_dirstat &&
934 git -c diff.dirstat=0,lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M &&
935 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
936 git -c diff.dirstat=0,lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC &&
937 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC
938 '
939
940 test_expect_success '--dirstat=future_param,lines,0 should fail loudly' '
941 test_must_fail git diff --dirstat=future_param,lines,0 HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
942 test_debug "cat actual_error" &&
943 test_must_be_empty actual_diff_dirstat &&
944 test_i18ngrep -q "future_param" actual_error &&
945 test_i18ngrep -q "\--dirstat" actual_error
946 '
947
948 test_expect_success '--dirstat=dummy1,cumulative,2dummy should report both unrecognized parameters' '
949 test_must_fail git diff --dirstat=dummy1,cumulative,2dummy HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
950 test_debug "cat actual_error" &&
951 test_must_be_empty actual_diff_dirstat &&
952 test_i18ngrep -q "dummy1" actual_error &&
953 test_i18ngrep -q "2dummy" actual_error &&
954 test_i18ngrep -q "\--dirstat" actual_error
955 '
956
957 test_expect_success 'diff.dirstat=future_param,0,lines should warn, but still work' '
958 git -c diff.dirstat=future_param,0,lines diff --dirstat HEAD^..HEAD >actual_diff_dirstat 2>actual_error &&
959 test_debug "cat actual_error" &&
960 test_cmp expect_diff_dirstat actual_diff_dirstat &&
961 test_i18ngrep -q "future_param" actual_error &&
962 test_i18ngrep -q "diff\\.dirstat" actual_error &&
963
964 git -c diff.dirstat=future_param,0,lines diff --dirstat -M HEAD^..HEAD >actual_diff_dirstat_M 2>actual_error &&
965 test_debug "cat actual_error" &&
966 test_cmp expect_diff_dirstat_M actual_diff_dirstat_M &&
967 test_i18ngrep -q "future_param" actual_error &&
968 test_i18ngrep -q "diff\\.dirstat" actual_error &&
969
970 git -c diff.dirstat=future_param,0,lines diff --dirstat -C -C HEAD^..HEAD >actual_diff_dirstat_CC 2>actual_error &&
971 test_debug "cat actual_error" &&
972 test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC &&
973 test_i18ngrep -q "future_param" actual_error &&
974 test_i18ngrep -q "diff\\.dirstat" actual_error
975 '
976
977 test_expect_success '--shortstat --dirstat should output only one dirstat' '
978 git diff --shortstat --dirstat=changes HEAD^..HEAD >out &&
979 grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_changes &&
980 test_line_count = 1 actual_diff_shortstat_dirstat_changes &&
981
982 git diff --shortstat --dirstat=lines HEAD^..HEAD >out &&
983 grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_lines &&
984 test_line_count = 1 actual_diff_shortstat_dirstat_lines &&
985
986 git diff --shortstat --dirstat=files HEAD^..HEAD >out &&
987 grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_files &&
988 test_line_count = 1 actual_diff_shortstat_dirstat_files
989 '
990
991 test_done