From: Nazri Ramliy Date: Sat, 19 Jun 2010 01:37:35 +0000 (+0800) Subject: log --decorate: Colorize commit decorations X-Git-Tag: v1.7.2-rc1~2^2~2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=67a4b5864f9423ccfe8090365029dae918504830;p=git.git log --decorate: Colorize commit decorations This makes the decorations stand out more and easier to distinguish and spot because they are colored differently depending on their type. Signed-off-by: Nazri Ramliy Signed-off-by: Junio C Hamano --- diff --git a/log-tree.c b/log-tree.c index bec609676..61680f466 100644 --- a/log-tree.c +++ b/log-tree.c @@ -7,6 +7,7 @@ #include "reflog-walk.h" #include "refs.h" #include "string-list.h" +#include "color.h" struct decoration name_decoration = { "object names" }; @@ -19,6 +20,29 @@ enum decoration_type { DECORATION_REF_HEAD, }; +static char decoration_colors[][COLOR_MAXLEN] = { + GIT_COLOR_RESET, + GIT_COLOR_BOLD_GREEN, /* REF_LOCAL */ + GIT_COLOR_BOLD_RED, /* REF_REMOTE */ + GIT_COLOR_BOLD_YELLOW, /* REF_TAG */ + GIT_COLOR_BOLD_MAGENTA, /* REF_STASH */ + GIT_COLOR_BOLD_CYAN, /* REF_HEAD */ +}; + +static const char *decorate_get_color(int decorate_use_color, enum decoration_type ix) +{ + if (decorate_use_color) + return decoration_colors[ix]; + return ""; +} + +/* + * log-tree.c uses DIFF_OPT_TST for determining whether to use color + * for showing the commit sha1, use the same check for --decorate + */ +#define decorate_get_color_opt(o, ix) \ + decorate_get_color(DIFF_OPT_TST((o), COLOR_DIFF), ix) + static void add_name_decoration(enum decoration_type type, const char *name, struct object *obj) { int nlen = strlen(name); @@ -81,6 +105,10 @@ void show_decorations(struct rev_info *opt, struct commit *commit) { const char *prefix; struct name_decoration *decoration; + const char *color_commit = + diff_get_color_opt(&opt->diffopt, DIFF_COMMIT); + const char *color_reset = + decorate_get_color_opt(&opt->diffopt, DECORATION_NONE); if (opt->show_source && commit->util) printf("\t%s", (char *) commit->util); @@ -92,9 +120,13 @@ void show_decorations(struct rev_info *opt, struct commit *commit) prefix = " ("; while (decoration) { printf("%s", prefix); + fputs(decorate_get_color_opt(&opt->diffopt, decoration->type), + stdout); if (decoration->type == DECORATION_REF_TAG) - printf("tag: "); + fputs("tag: ", stdout); printf("%s", decoration->name); + fputs(color_reset, stdout); + fputs(color_commit, stdout); prefix = ", "; decoration = decoration->next; }