Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > The main purpose of shallow clones is to reduce download by only > fetching objects up to a certain depth from the given refs. The number > of objects depends on how many refs to follow. So: > > - Only fetch HEAD or the ref specified by --branch > - Only fetch tags that point to downloaded objects > > More tags/branches can be fetched later using git-fetch as usual. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > Only lightly tested, but seems to work. Thanks. Perhaps you would want to add tests so that you do not have to say "lightly tested"? > diff --git a/builtin/clone.c b/builtin/clone.c > index efe8b6c..8de9248 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -48,6 +48,7 @@ static int option_verbosity; > static int option_progress; > static struct string_list option_config; > static struct string_list option_reference; > +static char *src_ref_prefix = "refs/heads/"; Would this be const? > static int opt_parse_reference(const struct option *opt, const char *arg, int unset) > { > @@ -427,9 +428,27 @@ static struct ref *wanted_peer_refs(const struct ref *refs, > struct ref *local_refs = head; > struct ref **tail = head ? &head->next : &local_refs; > > - get_fetch_map(refs, refspec, &tail, 0); > - if (!option_mirror) > - get_fetch_map(refs, tag_refspec, &tail, 0); > + if (option_depth) { > + struct ref *remote_head = NULL; > + > + if (!option_branch) > + remote_head = guess_remote_head(head, refs, 0); > + else { > + struct strbuf sb = STRBUF_INIT; > + strbuf_addstr(&sb, src_ref_prefix); > + strbuf_addstr(&sb, option_branch); > + remote_head = find_ref_by_name(refs, sb.buf); > + strbuf_release(&sb); > + } > + > + if (remote_head) > + get_fetch_map(remote_head, refspec, &tail, 0); What happens when we fail to find any remote_head and make no call to get_fetch_map() here? I am wondering if that should trigger an error here. Also this breaks 5500 for rather obvious reasons, as the point of this patch is to reduce the object transferred when a shallow clone is made. Perhaps there should be an option to give users the historical "all branches equally shallow" behaviour? -- 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