Skip to content

Commit

Permalink
log --decorate: Colorize commit decorations
Browse files Browse the repository at this point in the history
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 <ayiehere@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Nazri Ramliy authored and Junio C Hamano committed Jun 21, 2010
1 parent a752412 commit 67a4b58
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "reflog-walk.h"
#include "refs.h"
#include "string-list.h"
#include "color.h"

struct decoration name_decoration = { "object names" };

Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}
Expand Down

0 comments on commit 67a4b58

Please sign in to comment.