Signed-off-by: Felipe Contreras <felipe.contre...@gmail.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to