Code

Merge branch 'master' into db/fetch-pack
[git.git] / builtin-fetch.c
index 670af0b53f72e370368fddc1e911504a01979f6a..caaca63644b91b414d808079e14aee38c2a6eda7 100644 (file)
@@ -102,7 +102,7 @@ static struct ref *get_ref_map(struct transport *transport,
                                    remote->fetch[i].dst[0])
                                        *autotags = 1;
                                if (!i && !has_merge && ref_map &&
-                                   !strcmp(remote->fetch[0].src, ref_map->name))
+                                   !remote->fetch[0].pattern)
                                        ref_map->merge = 1;
                        }
                        if (has_merge)
@@ -112,6 +112,7 @@ static struct ref *get_ref_map(struct transport *transport,
                        ref_map->merge = 1;
                }
        }
+       ref_remove_duplicates(ref_map);
 
        return ref_map;
 }
@@ -392,8 +393,7 @@ static int do_fetch(struct transport *transport,
        if (transport->remote->fetch_tags == -1)
                no_tags = 1;
 
-       if (!transport->ops || !transport->ops->get_refs_list ||
-           !transport->ops->fetch)
+       if (!transport->get_refs_list || !transport->fetch)
                die("Don't know how to fetch from %s", transport->url);
 
        /* if not appending, truncate FETCH_HEAD */
@@ -430,6 +430,17 @@ static int do_fetch(struct transport *transport,
        return 0;
 }
 
+static void set_option(const char *name, const char *value)
+{
+       int r = transport_set_option(transport, name, value);
+       if (r < 0)
+               die("Option \"%s\" value \"%s\" is not valid for %s\n",
+                       name, value, transport->url);
+       if (r > 0)
+               warning("Option \"%s\" is ignored for %s\n",
+                       name, transport->url);
+}
+
 int cmd_fetch(int argc, const char **argv, const char *prefix)
 {
        struct remote *remote;
@@ -519,16 +530,17 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
        else
                remote = remote_get(argv[i++]);
 
-       transport = transport_get(remote, remote->uri[0]);
+       transport = transport_get(remote, remote->url[0]);
        if (verbose >= 2)
                transport->verbose = 1;
        if (quiet)
-               transport->verbose = 0;
+               transport->verbose = -1;
        if (upload_pack)
-               transport_set_option(transport, TRANS_OPT_UPLOADPACK, upload_pack);
+               set_option(TRANS_OPT_UPLOADPACK, upload_pack);
        if (keep)
-               transport_set_option(transport, TRANS_OPT_KEEP, "yes");
-       transport_set_option(transport, TRANS_OPT_DEPTH, depth);
+               set_option(TRANS_OPT_KEEP, "yes");
+       if (depth)
+               set_option(TRANS_OPT_DEPTH, depth);
 
        if (!transport->url)
                die("Where do you want to fetch from today?");