From: Jeff King <peff@peff•net>
To: Langbart <Langbart@protonmail•com>
Cc: "git@vger•kernel.org" <git@vger•kernel.org>
Subject: [PATCH] status: make coloring of "-z --short" consistent
Date: Tue, 7 Oct 2025 16:34:06 -0400 [thread overview]
Message-ID: <20251007203406.GA4028057@coredump.intra.peff.net> (raw)
In-Reply-To: <20251007082920.GA3349249@coredump.intra.peff.net>
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 and "--porcelain" is for machines. And "-z" by
itself, without any other output option, does default to "--porcelain",
so "git status -z" is for machines and will not colorize anything.
But if you ask for "-z" and "--short" together, then that is explicitly
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 <Langbart@protonmail•com>
Signed-off-by: Jeff King <peff@peff•net>
---
Same fix that I posted earlier, but now with a test and a commit
message.
t/t7508-status.sh | 11 +++++++++++
wt-status.c | 4 ++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/t/t7508-status.sh b/t/t7508-status.sh
index cdc1d6fcc7..abad229e9d 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -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
diff --git a/wt-status.c b/wt-status.c
index 8ffe6d3988..e12adb26b9 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -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);
}
--
2.51.0.717.g1fc658c4b9
next prev parent reply other threads:[~2025-10-07 20:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-05 0:48 Git Status Short Output Color Inconsistency with -z Flag Langbart
2025-10-07 8:29 ` Jeff King
2025-10-07 20:34 ` Jeff King [this message]
2025-10-17 8:44 ` [PATCH resend] status: make coloring of "-z --short" consistent Jeff King
2025-10-18 6:01 ` Langbart
2025-10-18 9:50 ` Jeff King
2025-10-18 15:08 ` Langbart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251007203406.GA4028057@coredump.intra.peff.net \
--to=peff@peff$(echo .)net \
--cc=Langbart@protonmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox