Felipe Contreras <felipe.contreras@xxxxxxxxx> writes: > Otherwise when using 'git branch -vv' it's hard to see them among so > much output. > > Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> > --- > > This time with strbuf. > > Documentation/config.txt | 3 ++- > builtin/branch.c | 38 ++++++++++++++++++++++++++++++-------- > 2 files changed, 32 insertions(+), 9 deletions(-) > > diff --git a/Documentation/config.txt b/Documentation/config.txt > index bc750d5..302533f 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -794,7 +794,8 @@ color.branch:: > color.branch.<slot>:: > Use customized color for branch coloration. `<slot>` is one of > `current` (the current branch), `local` (a local branch), > - `remote` (a remote-tracking branch in refs/remotes/), `plain` (other > + `remote` (a remote-tracking branch in refs/remotes/), > + `upstream` (upstream tracking branch), `plain` (other > refs). > + > The value for these configuration variables is a list of colors (at most > diff --git a/builtin/branch.c b/builtin/branch.c > index 00d17d2..26e9322 100644 > --- a/builtin/branch.c > +++ b/builtin/branch.c > @@ -40,13 +40,15 @@ static char branch_colors[][COLOR_MAXLEN] = { > GIT_COLOR_RED, /* REMOTE */ > GIT_COLOR_NORMAL, /* LOCAL */ > GIT_COLOR_GREEN, /* CURRENT */ > + GIT_COLOR_BLUE, /* UPSTREAM */ > }; > enum color_branch { > BRANCH_COLOR_RESET = 0, > BRANCH_COLOR_PLAIN = 1, > BRANCH_COLOR_REMOTE = 2, > BRANCH_COLOR_LOCAL = 3, > - BRANCH_COLOR_CURRENT = 4 > + BRANCH_COLOR_CURRENT = 4, > + BRANCH_COLOR_UPSTREAM = 5, > }; We had to fix these "trailing comma in enums" to help other peoples' compilers a few times. Yes, they happily take the trailing comma at the end of array values above. Don't complain to me ;-) > @@ -417,36 +421,54 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name, > int ours, theirs; > char *ref = NULL; > struct branch *branch = branch_get(branch_name); > + struct strbuf fancy; > + > + strbuf_init(&fancy, 0); > > if (!stat_tracking_info(branch, &ours, &theirs)) { > if (branch && branch->merge && branch->merge[0]->dst && > - show_upstream_ref) > - strbuf_addf(stat, "[%s] ", > - shorten_unambiguous_ref(branch->merge[0]->dst, 0)); > + show_upstream_ref) { > + ref = shorten_unambiguous_ref(branch->merge[0]->dst, 0); > + if (want_color(branch_use_color)) > + strbuf_addf(stat, "[%s%s%s] ", > + branch_get_color(BRANCH_COLOR_UPSTREAM), > + ref, branch_get_color(BRANCH_COLOR_RESET)); > + else > + strbuf_addf(stat, "[%s] ", ref); > + } > return; > } > > - if (show_upstream_ref) > + if (show_upstream_ref) { > ref = shorten_unambiguous_ref(branch->merge[0]->dst, 0); > + if (want_color(branch_use_color)) > + strbuf_addf(&fancy, "%s%s%s", > + branch_get_color(BRANCH_COLOR_UPSTREAM), > + ref, branch_get_color(BRANCH_COLOR_RESET)); > + else > + strbuf_addstr(&fancy, ref); > + } > + > if (!ours) { > if (ref) > - strbuf_addf(stat, _("[%s: behind %d]"), ref, theirs); > + strbuf_addf(stat, _("[%s: behind %d]"), fancy.buf, theirs); > else > strbuf_addf(stat, _("[behind %d]"), theirs); > > } else if (!theirs) { > if (ref) > - strbuf_addf(stat, _("[%s: ahead %d]"), ref, ours); > + strbuf_addf(stat, _("[%s: ahead %d]"), fancy.buf, ours); > else > strbuf_addf(stat, _("[ahead %d]"), ours); > } else { > if (ref) > strbuf_addf(stat, _("[%s: ahead %d, behind %d]"), > - ref, ours, theirs); > + fancy.buf, ours, theirs); > else > strbuf_addf(stat, _("[ahead %d, behind %d]"), > ours, theirs); > } > + strbuf_release(&fancy); > strbuf_addch(stat, ' '); > free(ref); > } Fairly straight-forward and looks good. -- 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