diff options
author | Junio C Hamano <gitster@pobox.com> | 2023-01-05 06:07:17 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-01-05 06:07:17 (GMT) |
commit | 1f9b02b970538e14086d07d6a8cc219259420a6f (patch) | |
tree | 473d39acb81bb66f78a873d5392d627108bc3a1c /commit.c | |
parent | 319c3abadb047b37e33195f29486794501c8f83f (diff) | |
parent | 7e2ad1cda2759a14f7b046c4c82e2418f8af878c (diff) | |
download | git-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.c | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -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)); |