fetch-pack: do not lazy-fetch during ref iteration
authorJonathan Tan <jonathantanmy@google.com>
Tue, 18 Aug 2020 04:01:35 +0000 (21:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 18 Aug 2020 20:25:05 +0000 (13:25 -0700)
commit5c3b801dab9d29c63c6c929405f808f064c11b77
tree448659d58b4973732361afeb16ef28b813e443b1
parentabcb7eeb31d0267ada469646be993ad25e127d0d
fetch-pack: do not lazy-fetch during ref iteration

In order to determine negotiation tips, "fetch-pack" iterates over all
refs and dereferences all annotated tags found. This causes the
existence of targets of refs and annotated tags to be checked. Avoiding
this is especially important when we use "git fetch" (which invokes
"fetch-pack") to perform lazy fetches in a partial clone because a
target of such a ref or annotated tag may need to be itself lazy-fetched
(and otherwise causing an infinite loop).

Therefore, teach "fetch-pack" not to lazy fetch whenever iterating over
refs. This is done by using the raw form of ref iteration and by
dereferencing tags ourselves.

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