summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2023-01-05 06:07:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2023-01-05 06:07:17 (GMT)
commit1f9b02b970538e14086d07d6a8cc219259420a6f (patch)
tree473d39acb81bb66f78a873d5392d627108bc3a1c /commit.c
parent319c3abadb047b37e33195f29486794501c8f83f (diff)
parent7e2ad1cda2759a14f7b046c4c82e2418f8af878c (diff)
downloadgit-1f9b02b970538e14086d07d6a8cc219259420a6f.zip
git-1f9b02b970538e14086d07d6a8cc219259420a6f.tar.gz
git-1f9b02b970538e14086d07d6a8cc219259420a6f.tar.bz2
Merge branch 'jt/avoid-lazy-fetch-commits'
Even in a repository with promisor remote, it is useless to attempt to lazily attempt fetching an object that is expected to be commit, because no "filter" mode omits commit objects. Take advantage of this assumption to fail fast on errors. * jt/avoid-lazy-fetch-commits: commit: don't lazy-fetch commits object-file: emit corruption errors when detected object-file: refactor map_loose_object_1() object-file: remove OBJECT_INFO_IGNORE_LOOSE
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/commit.c b/commit.c
index d00780b..14538a8 100644
--- a/commit.c
+++ b/commit.c
@@ -508,6 +508,17 @@ int repo_parse_commit_internal(struct repository *r,
enum object_type type;
void *buffer;
unsigned long size;
+ struct object_info oi = {
+ .typep = &type,
+ .sizep = &size,
+ .contentp = &buffer,
+ };
+ /*
+ * Git does not support partial clones that exclude commits, so set
+ * OBJECT_INFO_SKIP_FETCH_OBJECT to fail fast when an object is missing.
+ */
+ int flags = OBJECT_INFO_LOOKUP_REPLACE | OBJECT_INFO_SKIP_FETCH_OBJECT |
+ OBJECT_INFO_DIE_IF_CORRUPT;
int ret;
if (!item)
@@ -516,8 +527,8 @@ int repo_parse_commit_internal(struct repository *r,
return 0;
if (use_commit_graph && parse_commit_in_graph(r, item))
return 0;
- buffer = repo_read_object_file(r, &item->object.oid, &type, &size);
- if (!buffer)
+
+ if (oid_object_info_extended(r, &item->object.oid, &oi, flags) < 0)
return quiet_on_missing ? -1 :
error("Could not read %s",
oid_to_hex(&item->object.oid));