This patch fixes that the pretty-formats tformat and format ignore git's color option. Signed-off-by: Thomas Egerer <thomas.egerer@xxxxxxxxxxx> --- commit.h | 1 + log-tree.c | 1 + pretty.c | 29 +++++++++++++++++------------ 3 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/commit.h b/commit.h index 659c87c..d23bf99 100644 --- a/commit.h +++ b/commit.h @@ -78,6 +78,7 @@ struct pretty_print_context int show_notes; struct reflog_walk_info *reflog_info; const char *output_encoding; + unsigned colorize:1; }; struct userformat_want { diff --git a/log-tree.c b/log-tree.c index b46ed3b..63017d2 100644 --- a/log-tree.c +++ b/log-tree.c @@ -505,6 +505,7 @@ void show_log(struct rev_info *opt) ctx.abbrev = opt->diffopt.abbrev; ctx.after_subject = extra_headers; ctx.reflog_info = opt->reflog_info; + ctx.colorize = (DIFF_OPT_TST(&opt->diffopt, COLOR_DIFF) != 0); pretty_print_commit(opt->commit_format, commit, &msgbuf, &ctx); if (opt->add_signoff) diff --git a/pretty.c b/pretty.c index 8549934..3c3467f 100644 --- a/pretty.c +++ b/pretty.c @@ -743,7 +743,10 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder, struct format_commit_context *c = context; const struct commit *commit = c->commit; const char *msg = c->message; + char cbuf[COLOR_MAXLEN]; struct commit_list *p; + size_t consumed = 0; + char *color = NULL; int h1, h2; /* these are independent of the commit */ @@ -751,29 +754,31 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder, case 'C': if (placeholder[1] == '(') { const char *end = strchr(placeholder + 2, ')'); - char color[COLOR_MAXLEN]; if (!end) return 0; color_parse_mem(placeholder + 2, end - (placeholder + 2), - "--pretty format", color); - strbuf_addstr(sb, color); - return end - placeholder + 1; + "--pretty format", cbuf); + consumed = end - placeholder + 1; + color = cbuf; } if (!prefixcmp(placeholder + 1, "red")) { - strbuf_addstr(sb, GIT_COLOR_RED); - return 4; + color = GIT_COLOR_RED; + consumed = 4; } else if (!prefixcmp(placeholder + 1, "green")) { - strbuf_addstr(sb, GIT_COLOR_GREEN); - return 6; + color = GIT_COLOR_GREEN; + consumed = 6; } else if (!prefixcmp(placeholder + 1, "blue")) { - strbuf_addstr(sb, GIT_COLOR_BLUE); - return 5; + color = GIT_COLOR_BLUE; + consumed = 5; } else if (!prefixcmp(placeholder + 1, "reset")) { - strbuf_addstr(sb, GIT_COLOR_RESET); - return 6; + color = GIT_COLOR_RESET; + consumed = 6; } else return 0; + if (color && (c->pretty_ctx->colorize == 1)) + strbuf_addstr(sb, color); + return consumed; case 'n': /* newline */ strbuf_addch(sb, '\n'); return 1;