When running "git branch -a" (instead of "git branch -r"), we prefix the
remote-tracking branches with "remotes/" to allow the user to more easily
tell them apart from the local branches.

The code that prepended "remotes/" to remote-tracking branches was
located in print_ref_item(), while the code that adjusted the
ref_item.width (to account for the prepended "remotes/") was located in
append_ref().

This code moves the prepending of "remotes/" up into append_ref(), which
is a nice cleanup of the code, as well as a preparation for changing the
logic when remote-tracking branches start showing up in refs/peers/*.

Signed-off-by: Johan Herland <jo...@herland.net>
---
 builtin/branch.c | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/builtin/branch.c b/builtin/branch.c
index c8b49e3..4480be2 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -384,7 +384,6 @@ static int append_ref(const char *refname, const unsigned 
char *sha1, int flags,
        strbuf_addstr(&newitem->name, refname);
        newitem->kind = kind;
        newitem->commit = commit;
-       newitem->width = utf8_strwidth(refname);
        strbuf_init(&newitem->dest, 0);
        orig_refname = resolve_symref(orig_refname, prefix);
        if (orig_refname)
@@ -392,7 +391,8 @@ static int append_ref(const char *refname, const unsigned 
char *sha1, int flags,
        /* adjust for "remotes/" */
        if (newitem->kind == REF_REMOTE_BRANCH &&
            ref_list->kinds != REF_REMOTE_BRANCH)
-               newitem->width += 8;
+               strbuf_insert(&newitem->name, 0, "remotes/", 8);
+       newitem->width = utf8_strwidth(newitem->name.buf);
        if (newitem->width > ref_list->maxwidth)
                ref_list->maxwidth = newitem->width;
 
@@ -510,12 +510,12 @@ static void add_verbose_info(struct strbuf *out, struct 
ref_item *item,
 }
 
 static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
-                          int abbrev, int current, char *prefix)
+                          int abbrev, int current)
 {
        char c;
        int color;
        struct commit *commit = item->commit;
-       struct strbuf out = STRBUF_INIT, name = STRBUF_INIT;
+       struct strbuf out = STRBUF_INIT;
 
        if (!matches_merge_filter(commit))
                return;
@@ -538,15 +538,14 @@ static void print_ref_item(struct ref_item *item, int 
maxwidth, int verbose,
                color = BRANCH_COLOR_CURRENT;
        }
 
-       strbuf_addf(&name, "%s%s", prefix, item->name.buf);
        if (verbose) {
-               int utf8_compensation = strlen(name.buf) - 
utf8_strwidth(name.buf);
+               int utf8_compensation = strlen(item->name.buf) - 
utf8_strwidth(item->name.buf);
                strbuf_addf(&out, "%c %s%-*s%s", c, branch_get_color(color),
-                           maxwidth + utf8_compensation, name.buf,
+                           maxwidth + utf8_compensation, item->name.buf,
                            branch_get_color(BRANCH_COLOR_RESET));
        } else
                strbuf_addf(&out, "%c %s%s%s", c, branch_get_color(color),
-                           name.buf, branch_get_color(BRANCH_COLOR_RESET));
+                           item->name.buf, 
branch_get_color(BRANCH_COLOR_RESET));
 
        if (item->dest.len)
                strbuf_addf(&out, " -> %s", item->dest.buf);
@@ -559,7 +558,6 @@ static void print_ref_item(struct ref_item *item, int 
maxwidth, int verbose,
        } else {
                printf("%s\n", out.buf);
        }
-       strbuf_release(&name);
        strbuf_release(&out);
 }
 
@@ -613,7 +611,7 @@ static void show_detached(struct ref_list *ref_list)
                item.commit = head_commit;
                if (item.width > ref_list->maxwidth)
                        ref_list->maxwidth = item.width;
-               print_ref_item(&item, ref_list->maxwidth, ref_list->verbose, 
ref_list->abbrev, 1, "");
+               print_ref_item(&item, ref_list->maxwidth, ref_list->verbose, 
ref_list->abbrev, 1);
                strbuf_release(&item.name);
        }
 }
@@ -661,11 +659,8 @@ static int print_ref_list(int kinds, int detached, int 
verbose, int abbrev, stru
                int current = !detached &&
                        (ref_list.list[i].kind == REF_LOCAL_BRANCH) &&
                        !strcmp(ref_list.list[i].name.buf, head);
-               char *prefix = (kinds != REF_REMOTE_BRANCH &&
-                               ref_list.list[i].kind == REF_REMOTE_BRANCH)
-                               ? "remotes/" : "";
                print_ref_item(&ref_list.list[i], ref_list.maxwidth, verbose,
-                              abbrev, current, prefix);
+                              abbrev, current);
        }
 
        free_ref_list(&ref_list);
-- 
1.8.1.3.704.g33f7d4f

--
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