From: Thomas Egerer <thomas.egerer@secunet.com>
To: Will Palmer <wmpalmer@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] pretty.c: Make user defined format honor color option
Date: Thu, 17 Mar 2011 14:46:32 +0100 [thread overview]
Message-ID: <4D8210B8.804@secunet.com> (raw)
In-Reply-To: <1300354791.3269.19.camel@wpalmer.simply-domain>
This patch fixes that the pretty-formats tformat and format ignore
git's color option.
Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
---
builtin/log.c | 2 +-
builtin/rev-list.c | 1 +
builtin/shortlog.c | 5 +++--
commit.h | 1 +
log-tree.c | 1 +
pretty.c | 29 +++++++++++++++++------------
shortlog.h | 2 +-
7 files changed, 25 insertions(+), 16 deletions(-)
0001-pretty.c-Make-user-defined-format-honor-color-option.patch
diff --git a/builtin/log.c b/builtin/log.c
index f5ed690..d65d268 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -780,7 +780,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
log.in1 = 2;
log.in2 = 4;
for (i = 0; i < nr; i++)
- shortlog_add_commit(&log, list[i]);
+ shortlog_add_commit(rev, &log, list[i]);
shortlog_output(&log);
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index ba27d39..7dcd659 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -108,6 +108,7 @@ static void show_commit(struct commit *commit, void *data)
struct pretty_print_context ctx = {0};
ctx.abbrev = revs->abbrev;
ctx.date_mode = revs->date_mode;
+ ctx.colorize = (DIFF_OPT_TST(&revs->diffopt, COLOR_DIFF) != 0);
pretty_print_commit(revs->commit_format, commit, &buf, &ctx);
if (revs->graph) {
if (buf.len) {
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 1a21e4b..401525e 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -136,7 +136,7 @@ static void read_from_stdin(struct shortlog *log)
}
}
-void shortlog_add_commit(struct shortlog *log, struct commit *commit)
+void shortlog_add_commit(struct rev_info * rev, struct shortlog *log, struct commit *commit)
{
const char *author = NULL, *buffer;
struct strbuf buf = STRBUF_INIT;
@@ -166,6 +166,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
ctx.subject = "";
ctx.after_subject = "";
ctx.date_mode = DATE_NORMAL;
+ ctx.colorize = (DIFF_OPT_TST(&rev->diffopt, COLOR_DIFF) != 0);
pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &ufbuf, &ctx);
buffer = ufbuf.buf;
} else if (*buffer) {
@@ -183,7 +184,7 @@ static void get_from_rev(struct rev_info *rev, struct shortlog *log)
if (prepare_revision_walk(rev))
die("revision walk setup failed");
while ((commit = get_revision(rev)) != NULL)
- shortlog_add_commit(log, commit);
+ shortlog_add_commit(rev, log, commit);
}
static int parse_uint(char const **arg, int comma, int defval)
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)This patch fixes that the pretty-formats tformat and format ignore
git's color option.
Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
---
builtin/log.c | 2 +-
builtin/rev-list.c | 1 +
builtin/shortlog.c | 5 +++--
commit.h | 1 +
log-tree.c | 1 +
pretty.c | 29 +++++++++++++++++------------
shortlog.h | 2 +-
7 files changed, 25 insertions(+), 16 deletions(-)
0001-pretty.c-Make-user-defined-format-honor-color-option.patch
diff --git a/builtin/log.c b/builtin/log.c
index f5ed690..d65d268 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -780,7 +780,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
log.in1 = 2;
log.in2 = 4;
for (i = 0; i < nr; i++)
- shortlog_add_commit(&log, list[i]);
+ shortlog_add_commit(rev, &log, list[i]);
shortlog_output(&log);
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index ba27d39..7dcd659 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -108,6 +108,7 @@ static void show_commit(struct commit *commit, void *data)
struct pretty_print_context ctx = {0};
ctx.abbrev = revs->abbrev;
ctx.date_mode = revs->date_mode;
+ ctx.colorize = (DIFF_OPT_TST(&revs->diffopt, COLOR_DIFF) != 0);
pretty_print_commit(revs->commit_format, commit, &buf, &ctx);
if (revs->graph) {
if (buf.len) {
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 1a21e4b..401525e 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -136,7 +136,7 @@ static void read_from_stdin(struct shortlog *log)
}
}
-void shortlog_add_commit(struct shortlog *log, struct commit *commit)
+void shortlog_add_commit(struct rev_info * rev, struct shortlog *log, struct commit *commit)
{
const char *author = NULL, *buffer;
struct strbuf buf = STRBUF_INIT;
@@ -166,6 +166,7 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
ctx.subject = "";
ctx.after_subject = "";
ctx.date_mode = DATE_NORMAL;
+ ctx.colorize = (DIFF_OPT_TST(&rev->diffopt, COLOR_DIFF) != 0);
pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &ufbuf, &ctx);
buffer = ufbuf.buf;
} else if (*buffer) {
@@ -183,7 +184,7 @@ static void get_from_rev(struct rev_info *rev, struct shortlog *log)
if (prepare_revision_walk(rev))
die("revision walk setup failed");
while ((commit = get_revision(rev)) != NULL)
- shortlog_add_commit(log, commit);
+ shortlog_add_commit(rev, log, commit);
}
static int parse_uint(char const **arg, int comma, int defval)
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;
diff --git a/shortlog.h b/shortlog.h
index de4f86f..0da5f97 100644
--- a/shortlog.h
+++ b/shortlog.h
@@ -21,7 +21,7 @@ struct shortlog {
void shortlog_init(struct shortlog *log);
-void shortlog_add_commit(struct shortlog *log, struct commit *commit);
+void shortlog_add_commit(struct rev_info *rev, struct shortlog *log, struct commit *commit);
void shortlog_output(struct shortlog *log);
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;
diff --git a/shortlog.h b/shortlog.h
index de4f86f..0da5f97 100644
--- a/shortlog.h
+++ b/shortlog.h
@@ -21,7 +21,7 @@ struct shortlog {
void shortlog_init(struct shortlog *log);
-void shortlog_add_commit(struct shortlog *log, struct commit *commit);
+void shortlog_add_commit(struct rev_info *rev, struct shortlog *log, struct commit *commit);
void shortlog_output(struct shortlog *log);
prev parent reply other threads:[~2011-03-17 13:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-17 8:33 [PATCH] pretty.c: Make user defined format honor color option Thomas Egerer
2011-03-17 9:39 ` Will Palmer
2011-03-17 12:02 ` Thomas Egerer
2011-03-17 12:59 ` Will Palmer
2011-03-17 19:49 ` Jeff King
2011-03-17 13:46 ` Thomas Egerer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D8210B8.804@secunet.com \
--to=thomas.egerer@secunet.com \
--cc=git@vger.kernel.org \
--cc=wmpalmer@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.