decorate: avoid some unnecessary color overhead

In format_decorations(), don't obtain color sequences if there are no
decorations, and don't emit color sequences around empty strings.

Signed-off-by: Andy Koppe <andy.koppe@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Andy Koppe
2023-08-20 19:50:05 +01:00
committed by Junio C Hamano
parent a3883a6532
commit b87a9a2c1e

View File

@ -312,10 +312,7 @@ void format_decorations(struct strbuf *sb,
{ {
const struct name_decoration *decoration; const struct name_decoration *decoration;
const struct name_decoration *current_and_HEAD; const struct name_decoration *current_and_HEAD;
const char *color_commit = const char *color_commit, *color_reset;
diff_get_color(use_color, DIFF_COMMIT);
const char *color_reset =
decorate_get_color(use_color, DECORATION_NONE);
const char *prefix = " ("; const char *prefix = " (";
const char *suffix = ")"; const char *suffix = ")";
@ -334,6 +331,9 @@ void format_decorations(struct strbuf *sb,
separator = opts->separator; separator = opts->separator;
} }
color_commit = diff_get_color(use_color, DIFF_COMMIT);
color_reset = decorate_get_color(use_color, DECORATION_NONE);
current_and_HEAD = current_pointed_by_HEAD(decoration); current_and_HEAD = current_pointed_by_HEAD(decoration);
while (decoration) { while (decoration) {
/* /*
@ -342,9 +342,12 @@ void format_decorations(struct strbuf *sb,
* appeared, skipping the entry for current. * appeared, skipping the entry for current.
*/ */
if (decoration != current_and_HEAD) { if (decoration != current_and_HEAD) {
strbuf_addstr(sb, color_commit); if (*prefix) {
strbuf_addstr(sb, prefix); strbuf_addstr(sb, color_commit);
strbuf_addstr(sb, color_reset); strbuf_addstr(sb, prefix);
strbuf_addstr(sb, color_reset);
}
strbuf_addstr(sb, decorate_get_color(use_color, decoration->type)); strbuf_addstr(sb, decorate_get_color(use_color, decoration->type));
if (decoration->type == DECORATION_REF_TAG) if (decoration->type == DECORATION_REF_TAG)
strbuf_addstr(sb, "tag: "); strbuf_addstr(sb, "tag: ");
@ -364,9 +367,11 @@ void format_decorations(struct strbuf *sb,
} }
decoration = decoration->next; decoration = decoration->next;
} }
strbuf_addstr(sb, color_commit); if (*suffix) {
strbuf_addstr(sb, suffix); strbuf_addstr(sb, color_commit);
strbuf_addstr(sb, color_reset); strbuf_addstr(sb, suffix);
strbuf_addstr(sb, color_reset);
}
} }
void show_decorations(struct rev_info *opt, struct commit *commit) void show_decorations(struct rev_info *opt, struct commit *commit)