path: root/t/
diff options
authorJonathan Tan <>2018-09-21 18:22:38 (GMT)
committerJunio C Hamano <>2018-09-21 20:20:49 (GMT)
commit35f9e3e5e7a6436b50a8709e7e14a65a10cc1e7a (patch)
treecb042362ae6dfae86d7239ec22ca68b7cbd3afb1 /t/
parent4937291b45800372c2c34855a6a36d5d2a77af2c (diff)
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 <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 't/')
1 files changed, 17 insertions, 0 deletions
diff --git a/t/ b/t/
index bbbe753..359d27d 100755
--- a/t/
+++ b/t/
@@ -170,6 +170,23 @@ test_expect_success 'partial clone fetches blobs pointed to by refs even if norm
git -C dst fsck
+test_expect_success 'fetch what is specified on CLI even if already promised' '
+ rm -rf src dst.git &&
+ git init src &&
+ test_commit -C src foo &&
+ test_config -C src uploadpack.allowfilter 1 &&
+ test_config -C src uploadpack.allowanysha1inwant 1 &&
+ git hash-object --stdin <src/foo.t >blob &&
+ git clone --bare --filter=blob:none "file://$(pwd)/src" dst.git &&
+ git -C dst.git rev-list --objects --quiet --missing=print HEAD >missing_before &&
+ grep "?$(cat blob)" missing_before &&
+ git -C dst.git fetch origin $(cat blob) &&
+ git -C dst.git rev-list --objects --quiet --missing=print HEAD >missing_after &&
+ ! grep "?$(cat blob)" missing_after