describe: Make --tags and --all match lightweight tags more often
[gitweb.git] / builtin-remote.c
index 4cb763f989fc987d94141ed763223cb361cec44a..6b3325dfa9e0aa52d806d1c28692a05cf549abe4 100644 (file)
@@ -54,7 +54,7 @@ static int add(int argc, const char **argv)
        struct string_list track = { NULL, 0, 0 };
        const char *master = NULL;
        struct remote *remote;
-       struct strbuf buf, buf2;
+       struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT;
        const char *name, *url;
        int i;
 
@@ -81,9 +81,6 @@ static int add(int argc, const char **argv)
                        remote->fetch_refspec_nr))
                die("remote %s already exists.", name);
 
-       strbuf_init(&buf, 0);
-       strbuf_init(&buf2, 0);
-
        strbuf_addf(&buf2, "refs/heads/test:refs/remotes/%s/test", name);
        if (!valid_fetch_refspec(buf2.buf))
                die("'%s' is not a valid remote name", name);
@@ -352,7 +349,7 @@ static int rm(int argc, const char **argv)
                OPT_END()
        };
        struct remote *remote;
-       struct strbuf buf;
+       struct strbuf buf = STRBUF_INIT;
        struct known_remotes known_remotes = { NULL, NULL };
        struct string_list branches = { NULL, 0, 0, 1 };
        struct branches_for_remote cb_data = { NULL, &branches, &known_remotes };
@@ -368,7 +365,6 @@ static int rm(int argc, const char **argv)
        known_remotes.to_delete = remote;
        for_each_remote(add_known_remote, &known_remotes);
 
-       strbuf_init(&buf, 0);
        strbuf_addf(&buf, "remote.%s", remote->name);
        if (git_config_rename_section(buf.buf, NULL) < 1)
                return error("Could not remove config section '%s'", buf.buf);
@@ -650,10 +646,13 @@ static int get_one_entry(struct remote *remote, void *priv)
 {
        struct string_list *list = priv;
 
-       string_list_append(remote->name, list)->util = remote->url_nr ?
-               (void *)remote->url[0] : NULL;
-       if (remote->url_nr > 1)
-               warning("Remote %s has more than one URL", remote->name);
+       if (remote->url_nr > 0) {
+               int i;
+
+               for (i = 0; i < remote->url_nr; i++)
+                       string_list_append(remote->name, list)->util = (void *)remote->url[i];
+       } else
+               string_list_append(remote->name, list)->util = NULL;
 
        return 0;
 }
@@ -669,10 +668,14 @@ static int show_all(void)
                sort_string_list(&list);
                for (i = 0; i < list.nr; i++) {
                        struct string_list_item *item = list.items + i;
-                       printf("%s%s%s\n", item->string,
-                               verbose ? "\t" : "",
-                               verbose && item->util ?
-                                       (const char *)item->util : "");
+                       if (verbose)
+                               printf("%s\t%s\n", item->string,
+                                       item->util ? (const char *)item->util : "");
+                       else {
+                               if (i && !strcmp((item - 1)->string, item->string))
+                                       continue;
+                               printf("%s\n", item->string);
+                       }
                }
        }
        return result;