summaryrefslogtreecommitdiff
path: root/diffcore-order.c
diff options
context:
space:
mode:
authorLibravatar Jonathan Tan <jonathantanmy@google.com>2018-06-14 15:54:25 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2018-06-15 08:44:23 -0700
commitaf1c90d13eb325b3fb7b6913757882b663caf1c6 (patch)
tree8c92561259d800f8af26a1c1b1c1c06c6bc419fc /diffcore-order.c
parentfetch-pack: directly end negotiation if ACK ready (diff)
downloadtgif-af1c90d13eb325b3fb7b6913757882b663caf1c6.tar.xz
fetch-pack: use ref adv. to prune "have" sent
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 mark_complete_and_common_ref(). 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, mark_complete_and_common_ref() would not enqueue it. If mark_complete_and_common_ref() were invoked first, as it is in do_fetch_pack() for protocol v0, then mark_complete_and_common_ref() 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@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diffcore-order.c')
0 files changed, 0 insertions, 0 deletions