Skip to content

Commit ab27389

Browse files
amhkgitster
authored andcommitted
diff --shortstat --dirstat: remove duplicate output
When --shortstat is used in conjunction with --dirstat=changes, git diff will output the dirstat information twice: first as calculated by the 'lines' algorithm, then as calculated by the 'changes' algorithm: $ git diff --dirstat=changes,10 --shortstat v2.2.0..v2.2.1 23 files changed, 453 insertions(+), 54 deletions(-) 33.5% Documentation/RelNotes/ 26.2% t/ 46.6% Documentation/RelNotes/ 16.6% t/ The same duplication happens for --shortstat together with --dirstat=files, but not for --shortstat together with --dirstat=lines. Limit output to only include one dirstat part, calculated as specified by the --dirstat parameter. Also, add test for this. Signed-off-by: Mårten Kongstad <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 282616c commit ab27389

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

diff.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -4528,7 +4528,7 @@ void diff_flush(struct diff_options *options)
45284528
show_stats(&diffstat, options);
45294529
if (output_format & DIFF_FORMAT_SHORTSTAT)
45304530
show_shortstats(&diffstat, options);
4531-
if (output_format & DIFF_FORMAT_DIRSTAT)
4531+
if (output_format & DIFF_FORMAT_DIRSTAT && dirstat_by_line)
45324532
show_dirstat_by_line(&diffstat, options);
45334533
free_diffstat_info(&diffstat);
45344534
separator++;

t/t4047-diff-dirstat.sh

+14
Original file line numberDiff line numberDiff line change
@@ -973,4 +973,18 @@ test_expect_success 'diff.dirstat=future_param,0,lines should warn, but still wo
973973
test_i18ngrep -q "diff\\.dirstat" actual_error
974974
'
975975

976+
test_expect_success '--shortstat --dirstat should output only one dirstat' '
977+
git diff --shortstat --dirstat=changes HEAD^..HEAD >out &&
978+
grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_changes &&
979+
test_line_count = 1 actual_diff_shortstat_dirstat_changes &&
980+
981+
git diff --shortstat --dirstat=lines HEAD^..HEAD >out &&
982+
grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_lines &&
983+
test_line_count = 1 actual_diff_shortstat_dirstat_lines &&
984+
985+
git diff --shortstat --dirstat=files HEAD^..HEAD >out &&
986+
grep " dst/copy/changed/$" out >actual_diff_shortstat_dirstat_files &&
987+
test_line_count = 1 actual_diff_shortstat_dirstat_files
988+
'
989+
976990
test_done

0 commit comments

Comments
 (0)