Merge branch 'jt/cache-tree-avoid-lazy-fetch-during-merge'
authorJunio C Hamano <gitster@pobox.com>
Mon, 7 Oct 2019 02:32:58 +0000 (11:32 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Oct 2019 02:32:58 +0000 (11:32 +0900)
The cache-tree code has been taught to be less aggressive in
attempting to see if a tree object it computed already exists in
the repository.

* jt/cache-tree-avoid-lazy-fetch-during-merge:
  cache-tree: do not lazy-fetch tentative tree

cache-tree.c
t/t0410-partial-clone.sh

index 0e5724f..62edee4 100644 (file)
@@ -408,7 +408,7 @@ static int update_one(struct cache_tree *it,
        if (repair) {
                struct object_id oid;
                hash_object_file(buffer.buf, buffer.len, tree_type, &oid);
-               if (has_object_file(&oid))
+               if (has_object_file_with_flags(&oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
                        oidcpy(&it->oid, &oid);
                else
                        to_invalidate = 1;
index d4b7e53..1e389c0 100755 (executable)
@@ -540,6 +540,20 @@ test_expect_success 'gc stops traversal when a missing but promised object is re
        ! grep "$TREE_HASH" out
 '
 
+test_expect_success 'do not fetch when checking existence of tree we construct ourselves' '
+       rm -rf repo &&
+       test_create_repo repo &&
+       test_commit -C repo base &&
+       test_commit -C repo side1 &&
+       git -C repo checkout base &&
+       test_commit -C repo side2 &&
+
+       git -C repo config core.repositoryformatversion 1 &&
+       git -C repo config extensions.partialclone "arbitrary string" &&
+
+       git -C repo cherry-pick side1
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd