diff: fix regression with --stat and unmerged file
A regression was introduced in 12fc4ad89e (diff.c: use utf8_strwidth() to count display width, 2022-09-14) that causes missing newlines after "Unmerged" entries in `git diff --cached --stat` output. This problem affects v2.39.0-rc0 through v2.39.0. Add the missing newline along with a new test to cover this behavior. Signed-off-by: Peter Grayson <pete@jpgrayson.net> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Peter Grayson committed
Dec 14, 2022 at 12:41 UTC
209d9cb0114dff72e96d58bb3c27409660f1b45c
2 files changed
+11
-1
diff.c
+1
-1
@@ -2784,7 +2784,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
2784
else if (file->is_unmerged) {
2785
strbuf_addf(&out, " %s%s%*s | %*s",
2786
prefix, name, padding, "",
2787
- number_width, "Unmerged");
2787
+ number_width, "Unmerged\n");
2788
emit_diff_symbol(options, DIFF_SYMBOL_STATS_LINE,
2789
out.buf, out.len, 0);
2790
strbuf_reset(&out);
t/t4046-diff-unmerged.sh
+10
@@ -86,4 +86,14 @@ test_expect_success 'diff-files -3' '
86
test_cmp diff-files-3.expect diff-files-3.actual
87
'
88
89
+test_expect_success 'diff --stat' '
90
+ for path in $paths
91
+ do
92
+ echo " $path | Unmerged" || return 1
93
+ done >diff-stat.expect &&
94
+ echo " 0 files changed" >>diff-stat.expect &&
95
+ git diff --cached --stat >diff-stat.actual &&
96
+ test_cmp diff-stat.expect diff-stat.actual
97
+'
98
+
99
test_done