Heya, On Thu, Oct 29, 2009 at 08:56, Shawn O. Pearce <spearce@xxxxxxxxxxx> wrote: >> > I certainly have to wonder... if this is done in both fetch and >> > clone, why isn't it just part of fetch_refs? >> >> Because clone does not use fetch_refs, or am I missing something? > > Hmmph. Weird. Its been a while since I last looked at this code, > maybe I misunderstood it. Unless you mean transport_fetch_refs? It can't be done in transport_fetch_refs because the foreign helper transport needs to update all refs, including those that wanted_peer_refs decided not to fetch. Otherwise the 'HEAD' ref will not be updated, and it is left at all zeros. It is not as obvious that that is a problem in this patch, but when Junio merges with Nico's [5bdc32d3e "make 'git clone' ask the remote only for objects it cares about"] the code looks like this: if (refs) { struct ref *ref_cpy; mapped_refs = wanted_peer_refs(refs, refspec); ref_cpy = copy_ref_list(mapped_refs); transport_fetch_refs(transport, ref_cpy); if (transport->update_refs) { ref_cpy = copy_ref_list(refs); transport->update_refs(transport, ref_cpy); refs = ref_cpy; mapped_refs = wanted_peer_refs(refs, refspec); } } Does it make more sense now? transport_fetch_refs gets only a limited view of the refs, so it cannot pass all the refs to transport_update_refs as needed. -- Cheers, Sverre Rabbelier -- 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