Merge branch 'jk/status-z-short-fix'

The "--short" option of "git status" that meant output for humans
and "-z" option to show NUL delimited output format did not mix
well, and colored some but not all things.  The command has been
updated to color all elements consistently in such a case.

* jk/status-z-short-fix:
  status: make coloring of "-z --short" consistent
main
Junio C Hamano 2025-10-24 13:48:04 -07:00
commit e7909b3a90
2 changed files with 13 additions and 2 deletions

View File

@ -717,6 +717,17 @@ test_expect_success TTY 'status -s with color.status' '

'

test_expect_success TTY 'status -s keeps colors with -z' '
test_when_finished "rm -f output.*" &&
test_terminal git status -s -z >output.raw &&
# convert back to newlines to avoid portability issues with
# test_decode_color and test_cmp, and to let us use the same expected
# output as earlier tests
tr "\0" "\n" <output.raw >output.nl &&
test_decode_color <output.nl >output &&
test_cmp expect output
'

cat >expect <<\EOF
## <YELLOW>main<RESET>...<CYAN>upstream<RESET> [ahead <YELLOW>1<RESET>, behind <CYAN>2<RESET>]
<RED>M<RESET> dir1/modified

View File

@ -2042,13 +2042,13 @@ static void wt_shortstatus_status(struct string_list_item *it,
static void wt_shortstatus_other(struct string_list_item *it,
struct wt_status *s, const char *sign)
{
color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "%s", sign);
if (s->null_termination) {
fprintf(s->fp, "%s %s%c", sign, it->string, 0);
fprintf(s->fp, " %s%c", it->string, 0);
} else {
struct strbuf onebuf = STRBUF_INIT;
const char *one;
one = quote_path(it->string, s->prefix, &onebuf, QUOTE_PATH_QUOTE_SP);
color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "%s", sign);
fprintf(s->fp, " %s\n", one);
strbuf_release(&onebuf);
}