fetch: in partial clone, check presence of targets
authorJonathan Tan <jonathantanmy@google.com>
Fri, 21 Sep 2018 18:22:38 +0000 (11:22 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Sep 2018 20:20:49 +0000 (13:20 -0700)
commit35f9e3e5e7a6436b50a8709e7e14a65a10cc1e7a
treecb042362ae6dfae86d7239ec22ca68b7cbd3afb1
parent4937291b45800372c2c34855a6a36d5d2a77af2c
fetch: in partial clone, check presence of targets

When fetching an object that is known as a promisor object to the local
repository, the connectivity check in quickfetch() in builtin/fetch.c
succeeds, causing object transfer to be bypassed. However, this should
not happen if that object is merely promised and not actually present.

Because this happens, when a user invokes "git fetch origin <sha-1>" on
the command-line, the <sha-1> object may not actually be fetched even
though the command returns an exit code of 0. This is a similar issue
(but with a different cause) to the one fixed by a0c9016abd
("upload-pack: send refs' objects despite "filter"", 2018-07-09).

Therefore, update quickfetch() to also directly check for the presence
of all objects to be fetched. Its documentation and name are also
updated to better reflect what it does.

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