Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- builtin/branch.c | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/builtin/branch.c b/builtin/branch.c index 48af999..47644ad 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -42,6 +42,7 @@ static char branch_colors[][COLOR_MAXLEN] = { GIT_COLOR_NORMAL, /* LOCAL */ GIT_COLOR_GREEN, /* CURRENT */ GIT_COLOR_BLUE, /* UPSTREAM */ + GIT_COLOR_YELLOW, /* PUBLISH */ }; enum color_branch { BRANCH_COLOR_RESET = 0, @@ -49,7 +50,8 @@ enum color_branch { BRANCH_COLOR_REMOTE = 2, BRANCH_COLOR_LOCAL = 3, BRANCH_COLOR_CURRENT = 4, - BRANCH_COLOR_UPSTREAM = 5 + BRANCH_COLOR_UPSTREAM = 5, + BRANCH_COLOR_PUBLISH = 6 }; static enum merge_filter { @@ -76,6 +78,8 @@ static int parse_branch_color_slot(const char *var, int ofs) return BRANCH_COLOR_CURRENT; if (!strcasecmp(var+ofs, "upstream")) return BRANCH_COLOR_UPSTREAM; + if (!strcasecmp(var+ofs, "publish")) + return BRANCH_COLOR_PUBLISH; return -1; } @@ -424,17 +428,37 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name, struct branch *branch = branch_get(branch_name); struct strbuf fancy = STRBUF_INIT; + if (!branch) + return; + if (!stat_tracking_info(branch, &ours, &theirs)) { - if (branch && branch->merge && branch->merge[0]->dst && - show_upstream_ref) { + if (!show_upstream_ref) + return; + if (branch->merge && branch->merge[0]->dst) { ref = shorten_unambiguous_ref(branch->merge[0]->dst, 0); if (want_color(branch_use_color)) - strbuf_addf(stat, "[%s%s%s] ", + strbuf_addf(&fancy, "%s%s%s", branch_get_color(BRANCH_COLOR_UPSTREAM), ref, branch_get_color(BRANCH_COLOR_RESET)); else - strbuf_addf(stat, "[%s] ", ref); + strbuf_addstr(&fancy, ref); + } + if (branch->push.dst) { + ref = shorten_unambiguous_ref(branch->push.dst, 0); + if (fancy.len) + strbuf_addstr(&fancy, ", "); + if (want_color(branch_use_color)) + strbuf_addf(&fancy, "%s%s%s", + branch_get_color(BRANCH_COLOR_PUBLISH), + ref, branch_get_color(BRANCH_COLOR_RESET)); + else + strbuf_addstr(&fancy, ref); } + if (!fancy.len) + return; + strbuf_addf(stat, _("[%s]"), fancy.buf); + strbuf_release(&fancy); + strbuf_addch(stat, ' '); return; } @@ -446,6 +470,17 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name, ref, branch_get_color(BRANCH_COLOR_RESET)); else strbuf_addstr(&fancy, ref); + if (branch->push.dst) { + ref = shorten_unambiguous_ref(branch->push.dst, 0); + if (fancy.len) + strbuf_addstr(&fancy, ", "); + if (want_color(branch_use_color)) + strbuf_addf(&fancy, "%s%s%s", + branch_get_color(BRANCH_COLOR_PUBLISH), + ref, branch_get_color(BRANCH_COLOR_RESET)); + else + strbuf_addstr(&fancy, ref); + } } if (!ours) { -- 1.8.4-337-g7358a66-dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html