On 06/06, Jonathan Tan wrote: > In negotiation using protocol v2, fetch-pack sometimes does not make > full use of the information obtained in the ref advertisement: > specifically, that if the server advertises a commit that the client > also has, the client never needs to inform the server that it has the > commit's parents, since it can just tell the server that it has the > advertised commit and it knows that the server can and will infer the > rest. > > This is because, in do_fetch_pack_v2(), rev_list_insert_ref_oid() is > invoked before everything_local(). This means that if we have a commit > that is both our ref and their ref, it would be enqueued by > rev_list_insert_ref_oid() as SEEN, and since it is thus already SEEN, > everything_local() would not enqueue it. Thanks for fixing this slight issue with v2. Though maybe we need to update the commit message here because a previous patch in this version of the series broke up everything_local() into various parts so that it is no longer responsible for enqueueing commits? > > If everything_local() were invoked first, as it is in do_fetch_pack() > for protocol v0, then everything_local() would enqueue it with > COMMON_REF | SEEN. The addition of COMMON_REF ensures that its parents > are not sent as "have" lines. > > Change the order in do_fetch_pack_v2() to be consistent with > do_fetch_pack(), and to avoid sending unnecessary "have" lines. > > Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx> > --- -- Brandon Williams