threads / patch / 59270

patchlog: omit tag prefix for color decoration

Subject: [PATCH] log: omit tag prefix for color decoration

## tl;dr

3 messages between Feb 19, 2023 and Feb 21, 2023. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Andy Koppe· Feb 19, 2023, 17:46 UTC · lore

Omit the "tag: " prefix for tags in commit decorations when coloring is enabled. The prefix isn't necessary as such when tags are distinguished by color already, and omitting it saves a bit of space and visual noise.

It also avoids a problem: when the %d or %D placeholders are used while a %w wrapping specifier is in force in a format string, lines can be broken between the prefix and the tag name. In that case, the prefix gets colored correctly, but the tag name gets the default color instead.

Also remove the tag prefix from test t4207 for color decorations, and add --no-color to a test t6002 check of the output of rev-list --bisect that expects tag prefixes to be present.

Signed-off-by: Andy Koppe <andy.koppe@gmail.com>
---
CI run: https://github.com/ak2/git/actions/runs/4211957381
 log-tree.c                       |  3 ++-
 t/t4207-log-decoration-colors.sh | 22 +++++++++++-----------
 t/t6002-rev-list-bisect.sh       |  2 +-
 3 files changed, 14 insertions(+), 13 deletions(-)
Show changes to 3 files +14 −13

log-tree.c, t/t4207-log-decoration-colors.sh, t/t6002-rev-list-bisect.sh

diff --git a/log-tree.c b/log-tree.c
index 1dd5fcbf7b..64ea15e0a0 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -324,7 +324,8 @@ void format_decorations_extended(struct strbuf *sb,
 			strbuf_addstr(sb, prefix);
 			strbuf_addstr(sb, color_reset);
 			strbuf_addstr(sb, decorate_get_color(use_color, decoration->type));
-			if (decoration->type == DECORATION_REF_TAG)
+			if (!use_color &&
+			    decoration->type == DECORATION_REF_TAG)
 				strbuf_addstr(sb, "tag: ");
 
 			show_name(sb, decoration);
diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh
index ded33a82e2..a5ee7b19d7 100755
--- a/t/t4207-log-decoration-colors.sh
+++ b/t/t4207-log-decoration-colors.sh
@@ -55,13 +55,13 @@ test_expect_success 'commit decorations colored correctly' '
 	cat >expect <<-EOF &&
 	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
 ${c_reset}${c_branch}main${c_reset}${c_commit}, \
-${c_reset}${c_tag}tag: v1.0${c_reset}${c_commit}, \
-${c_reset}${c_tag}tag: B${c_reset}${c_commit})${c_reset} B
-${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A1${c_reset}${c_commit}, \
+${c_reset}${c_tag}v1.0${c_reset}${c_commit}, \
+${c_reset}${c_tag}B${c_reset}${c_commit})${c_reset} B
+${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}A1${c_reset}${c_commit}, \
 ${c_reset}${c_remoteBranch}other/main${c_reset}${c_commit})${c_reset} A1
 	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_stash}refs/stash${c_reset}${c_commit})${c_reset} \
 On main: Changes to A.t
-	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
+	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}A${c_reset}${c_commit})${c_reset} A
 	EOF
 
 	git log --first-parent --no-abbrev --decorate --oneline --color=always --all >actual &&
@@ -78,10 +78,10 @@ test_expect_success 'test coloring with replace-objects' '
 	cat >expect <<-EOF &&
 	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
 ${c_reset}${c_branch}main${c_reset}${c_commit}, \
-${c_reset}${c_tag}tag: D${c_reset}${c_commit})${c_reset} D
-	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: C${c_reset}${c_commit}, \
+${c_reset}${c_tag}D${c_reset}${c_commit})${c_reset} D
+	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}C${c_reset}${c_commit}, \
 ${c_reset}${c_grafted}replaced${c_reset}${c_commit})${c_reset} B
-	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
+	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}A${c_reset}${c_commit})${c_reset} A
 EOF
 
 	git log --first-parent --no-abbrev --decorate --oneline --color=always HEAD >actual &&
@@ -102,11 +102,11 @@ test_expect_success 'test coloring with grafted commit' '
 	cat >expect <<-EOF &&
 	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD -> \
 ${c_reset}${c_branch}main${c_reset}${c_commit}, \
-${c_reset}${c_tag}tag: D${c_reset}${c_commit}, \
+${c_reset}${c_tag}D${c_reset}${c_commit}, \
 ${c_reset}${c_grafted}replaced${c_reset}${c_commit})${c_reset} D
-	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: v1.0${c_reset}${c_commit}, \
-${c_reset}${c_tag}tag: B${c_reset}${c_commit})${c_reset} B
-	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A${c_reset}${c_commit})${c_reset} A
+	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}v1.0${c_reset}${c_commit}, \
+${c_reset}${c_tag}B${c_reset}${c_commit})${c_reset} B
+	${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}A${c_reset}${c_commit})${c_reset} A
 	EOF
 
 	git log --first-parent --no-abbrev --decorate --oneline --color=always HEAD >actual &&
diff --git a/t/t6002-rev-list-bisect.sh b/t/t6002-rev-list-bisect.sh
index 162cf50778..924923afaa 100755
--- a/t/t6002-rev-list-bisect.sh
+++ b/t/t6002-rev-list-bisect.sh
@@ -305,7 +305,7 @@ test_expect_success '--bisect-all --first-parent' '
 	# expect results to be ordered by distance (descending),
 	# commit hash (ascending)
 	sort -k4,4r -k1,1 expect.unsorted >expect &&
-	git rev-list --bisect-all --first-parent E ^F >actual &&
+	git rev-list --bisect-all --first-parent --no-color E ^F >actual &&
 	test_cmp expect actual
 '
 
-- 
2.39.0
Junio C Hamano· Feb 20, 2023, 21:36 UTC · re: Andy Koppe · lore

Re: [PATCH] log: omit tag prefix for color decoration

Andy Koppe <andy.koppe@gmail.com> writes:
> Omit the "tag: " prefix for tags in commit decorations when coloring is
> enabled. The prefix isn't necessary as such when tags are distinguished
> by color already, and omitting it saves a bit of space and visual noise.

As somebody whose color perception is weaker than other people, I am torn about this line of changes. Accessibiilty folks often warn us against designing UI that differentiates two things only by painting them in two different colors "to be inclusive", and the above goes directly against their guidelines.

The only saving grace in this case is that I expect that tags are named very differently from topics in well managed projects, and users can tell withotu "tag:" prefix even in the output without colors, and that si why I said "I am torn", not I am not outright 100% negative, but still I doubt that the upside of shortening 4 display spaces is worth going directly against inclusion advocates.

So...
Andy Koppe· Feb 21, 2023, 21:28 UTC · re: Junio C Hamano · lore

Re: [PATCH] log: omit tag prefix for color decoration

On Mon, 20 Feb 2023 at 21:36, Junio C Hamano wrote:
Show 19 quoted lines
>
> Andy Koppe writes:
>
> > Omit the "tag: " prefix for tags in commit decorations when coloring is
> > enabled. The prefix isn't necessary as such when tags are distinguished
> > by color already, and omitting it saves a bit of space and visual noise.
>
> As somebody whose color perception is weaker than other people, I am
> torn about this line of changes.  Accessibiilty folks often warn us
> against designing UI that differentiates two things only by painting
> them in two different colors "to be inclusive", and the above goes
> directly against their guidelines.
>
> The only saving grace in this case is that I expect that tags are
> named very differently from topics in well managed projects, and
> users can tell withotu "tag:" prefix even in the output without
> colors, and that si why I said "I am torn", not I am not outright
> 100% negative, but still I doubt that the upside of shortening 4
> display spaces is worth going directly against inclusion advocates.
I can't argue with that, particularly when changing default behavior.

Would you welcome a patch instead that implements a new %r pretty format placeholder alongside %d and %D that lists the refs separated by spaces only, i.e. without parentheses, commas or tag prefixes?

               %d
                   ref names, like the --decorate option of git-log(1)
               %D
                   ref names without the " (", ")" wrapping.
               %r
                   ref names only

(Having looked at the relevant code, I think it should still be a fairly small change.)

← back to recent threads