Subject: [PATCH] log --decorate: do not leak "commit" color into the next item

From: Junio C Hamano <[email-masked]>
Date: Wed, 18 Feb 2015 13:44:54 -0800

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 = black

because 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 = normal

to 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 <[email-masked]>
---

 * 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: ");