Re: [PATCH 7/7] Factor ref updating out of fetch_with_import
- From
Sverre Rabbelier <srabbelier@gmail.com>
- Date
- Oct 29, 2009, 16:32 UTC
- Message-ID
- <fabb9a1e0910290932u45c9c416m4d0ba0a8b2f5b01d@mail.gmail.com>
- In-Reply-To
- <20091029155607.GA10505@spearce.org>
Heya,
On Thu, Oct 29, 2009 at 08:56, Shawn O. Pearce <spearce@spearce.org> wrote:
Show 7 quoted lines
>> > 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