unpack-trees: batch fetching of missing blobs
authorJonathan Tan <jonathantanmy@google.com>
Fri, 8 Dec 2017 15:58:47 +0000 (15:58 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 Dec 2017 17:58:51 +0000 (09:58 -0800)
commitc0c578b33ca48ee6003d85706e13d97d12781354
tree6f7123769b5c1c4231cdf10958d0d41fe8a844f0
parent548719fbdc4ccd5d678afafbb5e3b5c8dac28489
unpack-trees: batch fetching of missing blobs

When running checkout, first prefetch all blobs that are to be updated
but are missing. This means that only one pack is downloaded during such
operations, instead of one per missing blob.

This operates only on the blob level - if a repository has a missing
tree, they are still fetched one at a time.

This does not use the delayed checkout mechanism introduced in commit
2841e8f ("convert: add "status=delayed" to filter process protocol",
2017-06-30) due to significant conceptual differences - in particular,
for partial clones, we already know what needs to be fetched based on
the contents of the local repo alone, whereas for status=delayed, it is
the filter process that tells us what needs to be checked in the end.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-object.c
fetch-object.h
t/t5601-clone.sh
unpack-trees.c