upload-pack: do not lazy-fetch "have" objects
commit77aa0941ce8ac2dc0027f85e0c79632034cd47f0
authorJonathan Tan <jonathantanmy@google.com>
Thu, 16 Jul 2020 18:09:50 +0000 (16 11:09 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Jul 2020 21:07:19 +0000 (16 14:07 -0700)
tree522566e2c589bbce3523f8351f7dd7e262cad136
parentbd42bbe1a46c0fe486fc33e82969275e27e4dc19
upload-pack: do not lazy-fetch "have" objects

When upload-pack receives a request containing "have" hashes, it (among
other things) checks if the served repository has the corresponding
objects. However, it does not do so with the
OBJECT_INFO_SKIP_FETCH_OBJECT flag, so if serving a partial clone, a
lazy fetch will be triggered first.

This was discovered at $DAYJOB when a user fetched from a partial clone
(into another partial clone - although this would also happen if the
repo to be fetched into is not a partial clone).

Therefore, whenever "have" hashes are checked for existence, pass the
OBJECT_INFO_SKIP_FETCH_OBJECT flag. Also add the OBJECT_INFO_QUICK flag
to improve performance, as it is typical that such objects do not exist
in the serving repo, and the consequences of a false negative are minor
(usually, a slightly larger pack sent).

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5616-partial-clone.sh
upload-pack.c