Skip to content

Commit 50927f4

Browse files
peffgitster
authored andcommitted
status: make coloring of "-z --short" consistent
When running "git status -z --short", the marker on modified index entries (e.g., "M") is colorized, but the "??" marker for untracked entries is not. Let's fix the "??" entries to show color here. At first glance you might think that neither should be colorized, as usually one would use "-z" to get machine-readable output. But this is a tricky and unusual case. We have two output formats, "--short" and "--porcelain" which are substantially similar, but differ in that "--short" is for humans who want something short and "--porcelain" is for machines. And "-z" by itself, without any other output option, does default to "--porcelain", so "git status -z" will not colorize anything. But if you explicitly ask for "-z" and "--short" together, then that is asking for the human-readable output, but separated by NULs. This is unlikely to be useful directly, but could for example be used if the output will be shown to a human outside of the terminal. At any rate, the current behavior is clearly wrong (since we colorize some things but not others), and I think colorizing everything is the least-surprising thing we can do here. Reported-by: Langbart <[email protected]> Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent c44beea commit 50927f4

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

t/t7508-status.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,17 @@ test_expect_success TTY 'status -s with color.status' '
717717
718718
'
719719

720+
test_expect_success TTY 'status -s keeps colors with -z' '
721+
test_when_finished "rm -f output.*" &&
722+
test_terminal git status -s -z >output.raw &&
723+
# convert back to newlines to avoid portability issues with
724+
# test_decode_color and test_cmp, and to let us use the same expected
725+
# output as earlier tests
726+
tr "\0" "\n" <output.raw >output.nl &&
727+
test_decode_color <output.nl >output &&
728+
test_cmp expect output
729+
'
730+
720731
cat >expect <<\EOF
721732
## <YELLOW>main<RESET>...<CYAN>upstream<RESET> [ahead <YELLOW>1<RESET>, behind <CYAN>2<RESET>]
722733
<RED>M<RESET> dir1/modified

wt-status.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2051,13 +2051,13 @@ static void wt_shortstatus_status(struct string_list_item *it,
20512051
static void wt_shortstatus_other(struct string_list_item *it,
20522052
struct wt_status *s, const char *sign)
20532053
{
2054+
color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "%s", sign);
20542055
if (s->null_termination) {
2055-
fprintf(s->fp, "%s %s%c", sign, it->string, 0);
2056+
fprintf(s->fp, " %s%c", it->string, 0);
20562057
} else {
20572058
struct strbuf onebuf = STRBUF_INIT;
20582059
const char *one;
20592060
one = quote_path(it->string, s->prefix, &onebuf, QUOTE_PATH_QUOTE_SP);
2060-
color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "%s", sign);
20612061
fprintf(s->fp, " %s\n", one);
20622062
strbuf_release(&onebuf);
20632063
}

0 commit comments

Comments
 (0)