Merge branch 'sg/clone-initial-fetch-configuration'
authorJunio C Hamano <gitster@pobox.com>
Fri, 4 Jan 2019 21:33:34 +0000 (13:33 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Jan 2019 21:33:34 +0000 (13:33 -0800)
Refspecs configured with "git -c var=val clone" did not propagate
to the resulting repository, which has been corrected.

* sg/clone-initial-fetch-configuration:
Documentation/clone: document ignored configuration variables
clone: respect additional configured fetch refspecs during initial fetch
clone: use a more appropriate variable name for the default refspec

1  2 
builtin/clone.c
diff --combined builtin/clone.c
index 15b142d64640e29c10e62d565ac21adbaaeebca4,c9c840eaf8b544505db9a69688674942233f6a42..7c7f98c72c80cfcb12f3d3f61a13f46b19967a8f
@@@ -548,7 -548,7 +548,7 @@@ static struct ref *find_remote_branch(c
  }
  
  static struct ref *wanted_peer_refs(const struct ref *refs,
-               struct refspec_item *refspec)
+               struct refspec *refspec)
  {
        struct ref *head = copy_ref(find_ref_by_name(refs, "HEAD"));
        struct ref *local_refs = head;
                        warning(_("Could not find remote branch %s to clone."),
                                option_branch);
                else {
-                       get_fetch_map(remote_head, refspec, &tail, 0);
+                       int i;
+                       for (i = 0; i < refspec->nr; i++)
+                               get_fetch_map(remote_head, &refspec->items[i],
+                                             &tail, 0);
  
                        /* if --branch=tag, pull the requested tag explicitly */
                        get_fetch_map(remote_head, tag_refspec, &tail, 0);
                }
-       } else
-               get_fetch_map(refs, refspec, &tail, 0);
+       } else {
+               int i;
+               for (i = 0; i < refspec->nr; i++)
+                       get_fetch_map(refs, &refspec->items[i], &tail, 0);
+       }
  
        if (!option_mirror && !option_single_branch && !option_no_tags)
                get_fetch_map(refs, tag_refspec, &tail, 0);
@@@ -748,7 -754,6 +754,7 @@@ static int checkout(int submodule_progr
        memset(&opts, 0, sizeof opts);
        opts.update = 1;
        opts.merge = 1;
 +      opts.clone = 1;
        opts.fn = oneway_merge;
        opts.verbose_update = (option_verbosity >= 0);
        opts.src_index = &the_index;
@@@ -890,7 -895,8 +896,8 @@@ int cmd_clone(int argc, const char **ar
        const struct ref *our_head_points_at;
        struct ref *mapped_refs;
        const struct ref *ref;
-       struct strbuf key = STRBUF_INIT, value = STRBUF_INIT;
+       struct strbuf key = STRBUF_INIT;
+       struct strbuf default_refspec = STRBUF_INIT;
        struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
        struct transport *transport = NULL;
        const char *src_ref_prefix = "refs/heads/";
        int err = 0, complete_refs_before_fetch = 1;
        int submodule_progress;
  
-       struct refspec rs = REFSPEC_INIT_FETCH;
        struct argv_array ref_prefixes = ARGV_ARRAY_INIT;
  
        fetch_if_missing = 0;
                strbuf_addf(&branch_top, "refs/remotes/%s/", option_origin);
        }
  
-       strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
        strbuf_addf(&key, "remote.%s.url", option_origin);
        git_config_set(key.buf, repo);
        strbuf_reset(&key);
        if (option_required_reference.nr || option_optional_reference.nr)
                setup_reference();
  
-       refspec_append(&rs, value.buf);
+       remote = remote_get(option_origin);
  
-       strbuf_reset(&value);
+       strbuf_addf(&default_refspec, "+%s*:%s*", src_ref_prefix,
+                   branch_top.buf);
+       refspec_append(&remote->fetch, default_refspec.buf);
  
-       remote = remote_get(option_origin);
        transport = transport_get(remote, remote->url[0]);
        transport_set_verbosity(transport, option_verbosity, option_progress);
        transport->family = family;
  
  
        argv_array_push(&ref_prefixes, "HEAD");
-       refspec_ref_prefixes(&rs, &ref_prefixes);
+       refspec_ref_prefixes(&remote->fetch, &ref_prefixes);
        if (option_branch)
                expand_ref_prefix(&ref_prefixes, option_branch);
        if (!option_no_tags)
        refs = transport_get_remote_refs(transport, &ref_prefixes);
  
        if (refs) {
-               mapped_refs = wanted_peer_refs(refs, &rs.items[0]);
+               mapped_refs = wanted_peer_refs(refs, &remote->fetch);
                /*
                 * transport_get_remote_refs() may return refs with null sha-1
                 * in mapped_refs (see struct transport->get_refs_list
        strbuf_release(&reflog_msg);
        strbuf_release(&branch_top);
        strbuf_release(&key);
-       strbuf_release(&value);
+       strbuf_release(&default_refspec);
        junk_mode = JUNK_LEAVE_ALL;
  
-       refspec_clear(&rs);
        argv_array_clear(&ref_prefixes);
        return err;
  }