diff options
author | Markus Heidelberg <markus.heidelberg@web.de> | 2009-04-22 23:41:25 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-04-22 18:36:25 -0700 |
commit | ab07ba2a2436cc717b872387320297bb806d35d9 (patch) | |
tree | a5c79daef90f72826ad796d1a5f83a23872d6ac7 /builtin-show-branch.c | |
parent | Merge branch 'mk/maint-apply-swap' (diff) | |
download | tgif-ab07ba2a2436cc717b872387320297bb806d35d9.tar.xz |
show-branch: color the commit status signs
Make it possible to color the status character ('*' '!' '+' '-') of each
commit corresponding to the branch it's in. This makes it easier to
follow a particular branch, especially if there are larger gaps in the
output.
Add the config option color.showbranch and the command line options
--color and --no-color to control the colored output.
Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-show-branch.c')
-rw-r--r-- | builtin-show-branch.c | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/builtin-show-branch.c b/builtin-show-branch.c index 828e6f86de..fc38f5e005 100644 --- a/builtin-show-branch.c +++ b/builtin-show-branch.c @@ -2,12 +2,25 @@ #include "commit.h" #include "refs.h" #include "builtin.h" +#include "color.h" static const char show_branch_usage[] = "git show-branch [--sparse] [--current] [--all] [--remotes] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...] | --reflog[=n[,b]] <branch>"; static const char show_branch_usage_reflog[] = "--reflog is incompatible with --all, --remotes, --independent or --merge-base"; +static int showbranch_use_color = -1; +static char column_colors[][COLOR_MAXLEN] = { + GIT_COLOR_RED, + GIT_COLOR_GREEN, + GIT_COLOR_YELLOW, + GIT_COLOR_BLUE, + GIT_COLOR_MAGENTA, + GIT_COLOR_CYAN, +}; + +#define COLUMN_COLORS_MAX (ARRAY_SIZE(column_colors)) + static int default_num; static int default_alloc; static const char **default_arg; @@ -19,6 +32,20 @@ static const char **default_arg; #define DEFAULT_REFLOG 4 +static const char *get_color_code(int idx) +{ + if (showbranch_use_color) + return column_colors[idx]; + return ""; +} + +static const char *get_color_reset_code(void) +{ + if (showbranch_use_color) + return GIT_COLOR_RESET; + return ""; +} + static struct commit *interesting(struct commit_list *list) { while (list) { @@ -545,7 +572,12 @@ static int git_show_branch_config(const char *var, const char *value, void *cb) return 0; } - return git_default_config(var, value, cb); + if (!strcmp(var, "color.showbranch")) { + showbranch_use_color = git_config_colorbool(var, value, -1); + return 0; + } + + return git_color_default_config(var, value, cb); } static int omit_in_dense(struct commit *commit, struct commit **rev, int n) @@ -611,6 +643,9 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) git_config(git_show_branch_config, NULL); + if (showbranch_use_color == -1) + showbranch_use_color = git_use_color_default; + /* If nothing is specified, try the default first */ if (ac == 1 && default_num) { ac = default_num + 1; @@ -658,6 +693,10 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) parse_reflog_param(arg + 9, &reflog, &reflog_base); else if (!prefixcmp(arg, "-g=")) parse_reflog_param(arg + 3, &reflog, &reflog_base); + else if (!strcmp(arg, "--color")) + showbranch_use_color = 1; + else if (!strcmp(arg, "--no-color")) + showbranch_use_color = 0; else usage(show_branch_usage); ac--; av++; @@ -843,8 +882,10 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) else { for (j = 0; j < i; j++) putchar(' '); - printf("%c [%s] ", - is_head ? '*' : '!', ref_name[i]); + printf("%s%c%s [%s] ", + get_color_code(i % COLUMN_COLORS_MAX), + is_head ? '*' : '!', + get_color_reset_code(), ref_name[i]); } if (!reflog) { @@ -903,7 +944,9 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) mark = '*'; else mark = '+'; - putchar(mark); + printf("%s%c%s", + get_color_code(i % COLUMN_COLORS_MAX), + mark, get_color_reset_code()); } putchar(' '); } |