[PATCH] log --decorate: do not leak "commit" color into the next item
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 18, 2015, 21:44 UTC
- Message-ID
- <xmqqpp9628tl.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <xmqqzj8b0w6t.fsf@gitster.dls.corp.google.com>
If you wanted to paint the HEAD and local branch name in the same color as the body text (perhaps because cyan and green are too faint on a black-on-white terminal to be readable), you would not want to have to say
[color "decorate"]
head = black
branch = blackbecause that you would not be able to reuse same configuration on a white-on-black terminal. You would naively expect
[color "decorate"]
head = normal
branch = normalto work, but unfortunately it does not. It paints the string "HEAD" and the branch name in the same color as the opening parenthesis or comma between the decoration elements when showing output like this:
$ git show -s --decorate
commit f3f407747c1cce420ae4b4857c4a6806efe38680 (HEAD, master)
...This is because the code forgets to reset the color after printing the "prefix" in its own color.
Signed-off-by: Junio C Hamano <gitster@pobox.com> ---
* Answering to myself ...
log-tree.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/log-tree.c b/log-tree.c index 7f0890e..53bb526 100644 --- a/log-tree.c +++ b/log-tree.c @@ -195,6 +195,7 @@ void format_decorations_extended(struct strbuf *sb, while (decoration) { strbuf_addstr(sb, color_commit); 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) strbuf_addstr(sb, "tag: ");