Merge branch 'ap/branch'
* ap/branch: branch --color: change default color selection. Colourise git-branch output
This commit is contained in:
commit
9b2c681cae
@ -5,6 +5,7 @@
|
||||
* Based on git-branch.sh by Junio C Hamano.
|
||||
*/
|
||||
|
||||
#include "color.h"
|
||||
#include "cache.h"
|
||||
#include "refs.h"
|
||||
#include "commit.h"
|
||||
@ -17,6 +18,58 @@ static const char builtin_branch_usage[] =
|
||||
static const char *head;
|
||||
static unsigned char head_sha1[20];
|
||||
|
||||
static int branch_use_color;
|
||||
static char branch_colors[][COLOR_MAXLEN] = {
|
||||
"\033[m", /* reset */
|
||||
"", /* PLAIN (normal) */
|
||||
"\033[31m", /* REMOTE (red) */
|
||||
"", /* LOCAL (normal) */
|
||||
"\033[32m", /* CURRENT (green) */
|
||||
};
|
||||
enum color_branch {
|
||||
COLOR_BRANCH_RESET = 0,
|
||||
COLOR_BRANCH_PLAIN = 1,
|
||||
COLOR_BRANCH_REMOTE = 2,
|
||||
COLOR_BRANCH_LOCAL = 3,
|
||||
COLOR_BRANCH_CURRENT = 4,
|
||||
};
|
||||
|
||||
static int parse_branch_color_slot(const char *var, int ofs)
|
||||
{
|
||||
if (!strcasecmp(var+ofs, "plain"))
|
||||
return COLOR_BRANCH_PLAIN;
|
||||
if (!strcasecmp(var+ofs, "reset"))
|
||||
return COLOR_BRANCH_RESET;
|
||||
if (!strcasecmp(var+ofs, "remote"))
|
||||
return COLOR_BRANCH_REMOTE;
|
||||
if (!strcasecmp(var+ofs, "local"))
|
||||
return COLOR_BRANCH_LOCAL;
|
||||
if (!strcasecmp(var+ofs, "current"))
|
||||
return COLOR_BRANCH_CURRENT;
|
||||
die("bad config variable '%s'", var);
|
||||
}
|
||||
|
||||
int git_branch_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "color.branch")) {
|
||||
branch_use_color = git_config_colorbool(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strncmp(var, "color.branch.", 13)) {
|
||||
int slot = parse_branch_color_slot(var, 13);
|
||||
color_parse(value, var, branch_colors[slot]);
|
||||
return 0;
|
||||
}
|
||||
return git_default_config(var, value);
|
||||
}
|
||||
|
||||
const char *branch_get_color(enum color_branch ix)
|
||||
{
|
||||
if (branch_use_color)
|
||||
return branch_colors[ix];
|
||||
return "";
|
||||
}
|
||||
|
||||
static int in_merge_bases(const unsigned char *sha1,
|
||||
struct commit *rev1,
|
||||
struct commit *rev2)
|
||||
@ -183,6 +236,7 @@ static void print_ref_list(int kinds, int verbose, int abbrev)
|
||||
int i;
|
||||
char c;
|
||||
struct ref_list ref_list;
|
||||
int color;
|
||||
|
||||
memset(&ref_list, 0, sizeof(ref_list));
|
||||
ref_list.kinds = kinds;
|
||||
@ -191,18 +245,38 @@ static void print_ref_list(int kinds, int verbose, int abbrev)
|
||||
qsort(ref_list.list, ref_list.index, sizeof(struct ref_item), ref_cmp);
|
||||
|
||||
for (i = 0; i < ref_list.index; i++) {
|
||||
switch( ref_list.list[i].kind ) {
|
||||
case REF_LOCAL_BRANCH:
|
||||
color = COLOR_BRANCH_LOCAL;
|
||||
break;
|
||||
case REF_REMOTE_BRANCH:
|
||||
color = COLOR_BRANCH_REMOTE;
|
||||
break;
|
||||
default:
|
||||
color = COLOR_BRANCH_PLAIN;
|
||||
break;
|
||||
}
|
||||
|
||||
c = ' ';
|
||||
if (ref_list.list[i].kind == REF_LOCAL_BRANCH &&
|
||||
!strcmp(ref_list.list[i].name, head))
|
||||
!strcmp(ref_list.list[i].name, head)) {
|
||||
c = '*';
|
||||
color = COLOR_BRANCH_CURRENT;
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
printf("%c %-*s", c, ref_list.maxwidth,
|
||||
ref_list.list[i].name);
|
||||
printf("%c %s%-*s%s", c,
|
||||
branch_get_color(color),
|
||||
ref_list.maxwidth,
|
||||
ref_list.list[i].name,
|
||||
branch_get_color(COLOR_BRANCH_RESET));
|
||||
print_ref_info(ref_list.list[i].sha1, abbrev);
|
||||
}
|
||||
else
|
||||
printf("%c %s\n", c, ref_list.list[i].name);
|
||||
printf("%c %s%s%s\n", c,
|
||||
branch_get_color(color),
|
||||
ref_list.list[i].name,
|
||||
branch_get_color(COLOR_BRANCH_RESET));
|
||||
}
|
||||
|
||||
free_ref_list(&ref_list);
|
||||
@ -253,7 +327,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
int kinds = REF_LOCAL_BRANCH;
|
||||
int i;
|
||||
|
||||
git_config(git_default_config);
|
||||
git_config(git_branch_config);
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
const char *arg = argv[i];
|
||||
@ -297,6 +371,14 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
verbose = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--color")) {
|
||||
branch_use_color = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--no-color")) {
|
||||
branch_use_color = 0;
|
||||
continue;
|
||||
}
|
||||
usage(builtin_branch_usage);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user