From: Junio C Hamano Date: Fri, 19 Oct 2018 04:34:08 +0000 (+0900) Subject: Merge branch 'jt/cache-tree-allow-missing-object-in-partial-clone' X-Git-Tag: v2.20.0-rc0~148 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a08b1d62b0c58c795b3ddbe34ea1f68786b95c82?ds=inline;hp=-c Merge branch 'jt/cache-tree-allow-missing-object-in-partial-clone' In a partial clone that will lazily be hydrated from the originating repository, we generally want to avoid "does this object exist (locally)?" on objects that we deliberately omitted when we created the clone. The cache-tree codepath (which is used to write a tree object out of the index) however insisted that the object exists, even for paths that are outside of the partial checkout area. The code has been updated to avoid such a check. * jt/cache-tree-allow-missing-object-in-partial-clone: cache-tree: skip some blob checks in partial clone --- a08b1d62b0c58c795b3ddbe34ea1f68786b95c82 diff --combined cache-tree.c index 9c5cf2cc4f,f210481f9b..9d454d24bc --- a/cache-tree.c +++ b/cache-tree.c @@@ -326,6 -326,7 +326,7 @@@ static int update_one(struct cache_tre unsigned mode; int expected_missing = 0; int contains_ita = 0; + int ce_missing_ok; path = ce->name; pathlen = ce_namelen(ce); @@@ -355,8 -356,11 +356,11 @@@ i++; } + ce_missing_ok = mode == S_IFGITLINK || missing_ok || + (repository_format_partial_clone && + ce_skip_worktree(ce)); if (is_null_oid(oid) || - (mode != S_IFGITLINK && !missing_ok && !has_object_file(oid))) { + (!ce_missing_ok && !has_object_file(oid))) { strbuf_release(&buffer); if (expected_missing) return -1; @@@ -781,7 -785,7 +785,7 @@@ static void verify_one(struct index_sta strbuf_add(&tree_buf, oid->hash, the_hash_algo->rawsz); } hash_object_file(tree_buf.buf, tree_buf.len, tree_type, &new_oid); - if (oidcmp(&new_oid, &it->oid)) + if (!oideq(&new_oid, &it->oid)) BUG("cache-tree for path %.*s does not match. " "Expected %s got %s", len, path->buf, oid_to_hex(&new_oid), oid_to_hex(&it->oid));