From 8f49151763cb81adf4bcec53c1ae67057081b02d Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 1 Jul 2025 14:22:15 +0200 Subject: object-store: rename files to "odb.{c,h}" In the preceding commits we have renamed the structures contained in "object-store.h" to `struct object_database` and `struct odb_backend`. As such, the code files "object-store.{c,h}" are confusingly named now. Rename them to "odb.{c,h}" accordingly. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- commit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'commit.c') diff --git a/commit.c b/commit.c index e915b2b9a1..1d30f8ce15 100644 --- a/commit.c +++ b/commit.c @@ -9,7 +9,7 @@ #include "hex.h" #include "repository.h" #include "object-name.h" -#include "object-store.h" +#include "odb.h" #include "utf8.h" #include "diff.h" #include "revision.h" -- cgit v1.2.3 From 961038856bcd319289a226e29503358123c0a1ba Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 1 Jul 2025 14:22:18 +0200 Subject: odb: get rid of `the_repository` in `assert_oid_type()` Get rid of our dependency on `the_repository` in `assert_oid_type()` by passing in the object database as a parameter and adjusting all callers. Rename the function to `odb_assert_oid_type()`. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- builtin/commit-tree.c | 2 +- commit.c | 2 +- odb.c | 5 +++-- odb.h | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) (limited to 'commit.c') diff --git a/builtin/commit-tree.c b/builtin/commit-tree.c index 546069f868..31cfd9bd15 100644 --- a/builtin/commit-tree.c +++ b/builtin/commit-tree.c @@ -48,7 +48,7 @@ static int parse_parent_arg_callback(const struct option *opt, if (repo_get_oid_commit(the_repository, arg, &oid)) die(_("not a valid object name %s"), arg); - assert_oid_type(&oid, OBJ_COMMIT); + odb_assert_oid_type(the_repository->objects, &oid, OBJ_COMMIT); new_parent(lookup_commit(the_repository, &oid), parents); return 0; } diff --git a/commit.c b/commit.c index 1d30f8ce15..aa65183d8b 100644 --- a/commit.c +++ b/commit.c @@ -1706,7 +1706,7 @@ int commit_tree_extended(const char *msg, size_t msg_len, /* Not having i18n.commitencoding is the same as having utf-8 */ encoding_is_utf8 = is_encoding_utf8(git_commit_encoding); - assert_oid_type(tree, OBJ_TREE); + odb_assert_oid_type(the_repository->objects, tree, OBJ_TREE); if (memchr(msg, '\0', msg_len)) return error("a NUL byte in commit log message not allowed."); diff --git a/odb.c b/odb.c index 240fc62ca2..d0ca299077 100644 --- a/odb.c +++ b/odb.c @@ -946,9 +946,10 @@ int has_object(struct repository *r, const struct object_id *oid, return oid_object_info_extended(r, oid, NULL, object_info_flags) >= 0; } -void assert_oid_type(const struct object_id *oid, enum object_type expect) +void odb_assert_oid_type(struct object_database *odb, + const struct object_id *oid, enum object_type expect) { - enum object_type type = oid_object_info(the_repository, oid, NULL); + enum object_type type = oid_object_info(odb->repo, oid, NULL); if (type < 0) die(_("%s is not a valid object"), oid_to_hex(oid)); if (type != expect) diff --git a/odb.h b/odb.h index 941329c694..13f5da45f5 100644 --- a/odb.h +++ b/odb.h @@ -302,7 +302,8 @@ enum { int has_object(struct repository *r, const struct object_id *oid, unsigned flags); -void assert_oid_type(const struct object_id *oid, enum object_type expect); +void odb_assert_oid_type(struct object_database *odb, + const struct object_id *oid, enum object_type expect); /* * Enabling the object read lock allows multiple threads to safely call the -- cgit v1.2.3 From e989dd96b8aa9b20b0e23d3fa845d0baba1b454a Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 1 Jul 2025 14:22:25 +0200 Subject: odb: rename `oid_object_info()` Rename `oid_object_info()` to `odb_read_object_info()` as well as their `_extended()` variant to match other functions related to the object database and our modern coding guidelines. Introduce compatibility wrappers so that any in-flight topics will continue to compile. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- archive.c | 2 +- blame.c | 4 +-- builtin/blame.c | 4 +-- builtin/cat-file.c | 26 ++++++++++--------- builtin/describe.c | 3 ++- builtin/fast-export.c | 2 +- builtin/fast-import.c | 17 ++++++------ builtin/fsck.c | 7 ++--- builtin/gc.c | 2 +- builtin/grep.c | 2 +- builtin/index-pack.c | 13 +++++----- builtin/ls-files.c | 2 +- builtin/ls-tree.c | 4 +-- builtin/mktree.c | 8 +++--- builtin/pack-objects.c | 30 ++++++++++++---------- builtin/prune.c | 4 +-- builtin/repack.c | 2 +- builtin/replace.c | 10 ++++---- builtin/rev-list.c | 6 +++-- builtin/tag.c | 4 +-- builtin/unpack-objects.c | 2 +- commit-graph.c | 2 +- commit.c | 3 ++- diff.c | 18 ++++++------- fetch-pack.c | 4 +-- list-objects-filter.c | 2 +- log-tree.c | 2 +- merge-ort.c | 4 +-- object-file.c | 2 +- object-file.h | 2 +- object-name.c | 16 ++++++------ object.c | 6 ++--- odb.c | 60 ++++++++++++++++++++++--------------------- odb.h | 46 +++++++++++++++++++++++++++------ pack-bitmap-write.c | 4 +-- pack-bitmap.c | 8 +++--- packfile.c | 5 ++-- promisor-remote.c | 4 +-- protocol-caps.c | 2 +- reachable.c | 2 +- read-cache.c | 6 ++--- ref-filter.c | 4 +-- remote.c | 5 ++-- sequencer.c | 5 ++-- streaming.c | 8 +++--- submodule.c | 5 ++-- t/helper/test-partial-clone.c | 2 +- tag.c | 2 +- 48 files changed, 213 insertions(+), 170 deletions(-) (limited to 'commit.c') diff --git a/archive.c b/archive.c index 7fa2cc2596..f2511d530d 100644 --- a/archive.c +++ b/archive.c @@ -215,7 +215,7 @@ static int write_archive_entry(const struct object_id *oid, const char *base, /* Stream it? */ if (S_ISREG(mode) && !args->convert && - oid_object_info(args->repo, oid, &size) == OBJ_BLOB && + odb_read_object_info(args->repo->objects, oid, &size) == OBJ_BLOB && size > repo_settings_get_big_file_threshold(the_repository)) return write_entry(args, oid, path.buf, path.len, mode, NULL, size); diff --git a/blame.c b/blame.c index 0ceea080a8..97db3355af 100644 --- a/blame.c +++ b/blame.c @@ -116,7 +116,7 @@ static void verify_working_tree_path(struct repository *r, unsigned short mode; if (!get_tree_entry(r, commit_oid, path, &blob_oid, &mode) && - oid_object_info(r, &blob_oid, NULL) == OBJ_BLOB) + odb_read_object_info(r->objects, &blob_oid, NULL) == OBJ_BLOB) return; } @@ -1245,7 +1245,7 @@ static int fill_blob_sha1_and_mode(struct repository *r, return 0; if (get_tree_entry(r, &origin->commit->object.oid, origin->path, &origin->blob_oid, &origin->mode)) goto error_out; - if (oid_object_info(r, &origin->blob_oid, NULL) != OBJ_BLOB) + if (odb_read_object_info(r->objects, &origin->blob_oid, NULL) != OBJ_BLOB) goto error_out; return 0; error_out: diff --git a/builtin/blame.c b/builtin/blame.c index 15eda60af9..91586e6852 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -837,7 +837,7 @@ static int is_a_rev(const char *name) if (repo_get_oid(the_repository, name, &oid)) return 0; - return OBJ_NONE < oid_object_info(the_repository, &oid, NULL); + return OBJ_NONE < odb_read_object_info(the_repository->objects, &oid, NULL); } static int peel_to_commit_oid(struct object_id *oid_ret, void *cbdata) @@ -848,7 +848,7 @@ static int peel_to_commit_oid(struct object_id *oid_ret, void *cbdata) oidcpy(&oid, oid_ret); while (1) { struct object *obj; - int kind = oid_object_info(r, &oid, NULL); + int kind = odb_read_object_info(r->objects, &oid, NULL); if (kind == OBJ_COMMIT) { oidcpy(oid_ret, &oid); return 0; diff --git a/builtin/cat-file.c b/builtin/cat-file.c index f3a925a818..f7595fdb04 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -132,7 +132,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) switch (opt) { case 't': oi.typep = &type; - if (oid_object_info_extended(the_repository, &oid, &oi, flags) < 0) + if (odb_read_object_info_extended(the_repository->objects, &oid, &oi, flags) < 0) die("git cat-file: could not get object info"); printf("%s\n", type_name(type)); ret = 0; @@ -146,7 +146,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) oi.contentp = (void**)&buf; } - if (oid_object_info_extended(the_repository, &oid, &oi, flags) < 0) + if (odb_read_object_info_extended(the_repository->objects, &oid, &oi, flags) < 0) die("git cat-file: could not get object info"); if (use_mailmap && (type == OBJ_COMMIT || type == OBJ_TAG)) { @@ -180,7 +180,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) /* else fallthrough */ case 'p': - type = oid_object_info(the_repository, &oid, NULL); + type = odb_read_object_info(the_repository->objects, &oid, NULL); if (type < 0) die("Not a valid object name %s", obj_name); @@ -217,7 +217,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) if (exp_type_id == OBJ_BLOB) { struct object_id blob_oid; - if (oid_object_info(the_repository, &oid, NULL) == OBJ_TAG) { + if (odb_read_object_info(the_repository->objects, + &oid, NULL) == OBJ_TAG) { char *buffer = repo_read_object_file(the_repository, &oid, &type, @@ -235,7 +236,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) } else oidcpy(&blob_oid, &oid); - if (oid_object_info(the_repository, &blob_oid, NULL) == OBJ_BLOB) { + if (odb_read_object_info(the_repository->objects, + &blob_oid, NULL) == OBJ_BLOB) { ret = stream_blob(&blob_oid); goto cleanup; } @@ -294,7 +296,7 @@ struct expand_data { /* * After a mark_query run, this object_info is set up to be - * passed to oid_object_info_extended. It will point to the data + * passed to odb_read_object_info_extended. It will point to the data * elements above, so you can retrieve the response from there. */ struct object_info info; @@ -484,12 +486,12 @@ static void batch_object_write(const char *obj_name, data->info.sizep = &data->size; if (pack) - ret = packed_object_info(the_repository, pack, offset, - &data->info); + ret = packed_object_info(the_repository, pack, + offset, &data->info); else - ret = oid_object_info_extended(the_repository, - &data->oid, &data->info, - OBJECT_INFO_LOOKUP_REPLACE); + ret = odb_read_object_info_extended(the_repository->objects, + &data->oid, &data->info, + OBJECT_INFO_LOOKUP_REPLACE); if (ret < 0) { report_object_status(opt, obj_name, &data->oid, "missing"); return; @@ -872,7 +874,7 @@ static int batch_objects(struct batch_options *opt) /* * Expand once with our special mark_query flag, which will prime the - * object_info to be handed to oid_object_info_extended for each + * object_info to be handed to odb_read_object_info_extended for each * object. */ memset(&data, 0, sizeof(data)); diff --git a/builtin/describe.c b/builtin/describe.c index 96cb68e5e5..fbf305d762 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -552,7 +552,8 @@ static void describe(const char *arg, int last_one) if (cmit) describe_commit(&oid, &sb); - else if (oid_object_info(the_repository, &oid, NULL) == OBJ_BLOB) + else if (odb_read_object_info(the_repository->objects, + &oid, NULL) == OBJ_BLOB) describe_blob(oid, &sb); else die(_("%s is neither a commit nor blob"), arg); diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 0505f289a9..6c93cf0a8a 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -1200,7 +1200,7 @@ static void import_marks(char *input_file, int check_exists) if (last_idnum < mark) last_idnum = mark; - type = oid_object_info(the_repository, &oid, NULL); + type = odb_read_object_info(the_repository->objects, &oid, NULL); if (type < 0) die("object not found: %s", oid_to_hex(&oid)); diff --git a/builtin/fast-import.c b/builtin/fast-import.c index 413304db9b..2718376f2c 100644 --- a/builtin/fast-import.c +++ b/builtin/fast-import.c @@ -1756,8 +1756,8 @@ static void insert_object_entry(struct mark_set **s, struct object_id *oid, uint struct object_entry *e; e = find_object(oid); if (!e) { - enum object_type type = oid_object_info(the_repository, - oid, NULL); + enum object_type type = odb_read_object_info(the_repository->objects, + oid, NULL); if (type < 0) die("object not found: %s", oid_to_hex(oid)); e = insert_object(oid); @@ -2416,8 +2416,8 @@ static void file_change_m(const char *p, struct branch *b) enum object_type expected = S_ISDIR(mode) ? OBJ_TREE: OBJ_BLOB; enum object_type type = oe ? oe->type : - oid_object_info(the_repository, &oid, - NULL); + odb_read_object_info(the_repository->objects, + &oid, NULL); if (type < 0) die("%s not found: %s", S_ISDIR(mode) ? "Tree" : "Blob", @@ -2553,7 +2553,7 @@ static void note_change_n(const char *p, struct branch *b, unsigned char *old_fa die("Not a blob (actually a %s): %s", type_name(oe->type), command_buf.buf); } else if (!is_null_oid(&oid)) { - enum object_type type = oid_object_info(the_repository, &oid, + enum object_type type = odb_read_object_info(the_repository->objects, &oid, NULL); if (type < 0) die("Blob not found: %s", command_buf.buf); @@ -2895,7 +2895,8 @@ static void parse_new_tag(const char *arg) } else if (!repo_get_oid(the_repository, from, &oid)) { struct object_entry *oe = find_object(&oid); if (!oe) { - type = oid_object_info(the_repository, &oid, NULL); + type = odb_read_object_info(the_repository->objects, + &oid, NULL); if (type < 0) die("Not a valid object: %s", from); } else @@ -3085,8 +3086,8 @@ static struct object_entry *dereference(struct object_entry *oe, const unsigned hexsz = the_hash_algo->hexsz; if (!oe) { - enum object_type type = oid_object_info(the_repository, oid, - NULL); + enum object_type type = odb_read_object_info(the_repository->objects, + oid, NULL); if (type < 0) die("object not found: %s", oid_to_hex(oid)); /* cache it! */ diff --git a/builtin/fsck.c b/builtin/fsck.c index 014aa1344e..6e3465b026 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -71,7 +71,8 @@ static const char *printable_type(const struct object_id *oid, const char *ret; if (type == OBJ_NONE) - type = oid_object_info(the_repository, oid, NULL); + type = odb_read_object_info(the_repository->objects, + oid, NULL); ret = type_name(type); if (!ret) @@ -232,8 +233,8 @@ static void mark_unreachable_referents(const struct object_id *oid) * (and we want to avoid parsing blobs). */ if (obj->type == OBJ_NONE) { - enum object_type type = oid_object_info(the_repository, - &obj->oid, NULL); + enum object_type type = odb_read_object_info(the_repository->objects, + &obj->oid, NULL); if (type > 0) object_as_type(obj, type, 0); } diff --git a/builtin/gc.c b/builtin/gc.c index 50a09eb07e..ff551fab43 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -1080,7 +1080,7 @@ static int dfs_on_ref(const char *refname UNUSED, if (!peel_iterated_oid(the_repository, oid, &peeled)) oid = &peeled; - if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT) + if (odb_read_object_info(the_repository->objects, oid, NULL) != OBJ_COMMIT) return 0; commit = lookup_commit(the_repository, oid); diff --git a/builtin/grep.c b/builtin/grep.c index cfcf916bce..1435d462cd 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -520,7 +520,7 @@ static int grep_submodule(struct grep_opt *opt, struct strbuf base = STRBUF_INIT; obj_read_lock(); - object_type = oid_object_info(subrepo, oid, NULL); + object_type = odb_read_object_info(subrepo->objects, oid, NULL); obj_read_unlock(); data = read_object_with_reference(subrepo, oid, OBJ_TREE, diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 4d4d989eb1..d0b1690812 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -260,7 +260,8 @@ static unsigned check_object(struct object *obj) if (!(obj->flags & FLAG_CHECKED)) { unsigned long size; - int type = oid_object_info(the_repository, &obj->oid, &size); + int type = odb_read_object_info(the_repository->objects, + &obj->oid, &size); if (type <= 0) die(_("did not receive expected object %s"), oid_to_hex(&obj->oid)); @@ -908,7 +909,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, enum object_type has_type; unsigned long has_size; read_lock(); - has_type = oid_object_info(the_repository, oid, &has_size); + has_type = odb_read_object_info(the_repository->objects, oid, &has_size); if (has_type < 0) die(_("cannot read existing object info %s"), oid_to_hex(oid)); if (has_type != type || has_size != size) @@ -1501,9 +1502,9 @@ static void fix_unresolved_deltas(struct hashfile *f) struct oid_array to_fetch = OID_ARRAY_INIT; for (i = 0; i < nr_ref_deltas; i++) { struct ref_delta_entry *d = sorted_by_pos[i]; - if (!oid_object_info_extended(the_repository, &d->oid, - NULL, - OBJECT_INFO_FOR_PREFETCH)) + if (!odb_read_object_info_extended(the_repository->objects, + &d->oid, NULL, + OBJECT_INFO_FOR_PREFETCH)) continue; oid_array_append(&to_fetch, &d->oid); } @@ -1829,7 +1830,7 @@ static void repack_local_links(void) oidset_iter_init(&outgoing_links, &iter); while ((oid = oidset_iter_next(&iter))) { struct object_info info = OBJECT_INFO_INIT; - if (oid_object_info_extended(the_repository, oid, &info, 0)) + if (odb_read_object_info_extended(the_repository->objects, oid, &info, 0)) /* Missing; assume it is a promisor object */ continue; if (info.whence == OI_PACKED && info.u.packed.pack->pack_promisor) diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 821339b07d..ff975e7be0 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -251,7 +251,7 @@ static void expand_objectsize(struct repository *repo, struct strbuf *line, { if (type == OBJ_BLOB) { unsigned long size; - if (oid_object_info(repo, oid, &size) < 0) + if (odb_read_object_info(repo->objects, oid, &size) < 0) die(_("could not get object info about '%s'"), oid_to_hex(oid)); if (padded) diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c index 62b6fd58c1..4d616dd528 100644 --- a/builtin/ls-tree.c +++ b/builtin/ls-tree.c @@ -27,7 +27,7 @@ static void expand_objectsize(struct strbuf *line, const struct object_id *oid, { if (type == OBJ_BLOB) { unsigned long size; - if (oid_object_info(the_repository, oid, &size) < 0) + if (odb_read_object_info(the_repository->objects, oid, &size) < 0) die(_("could not get object info about '%s'"), oid_to_hex(oid)); if (padded) @@ -217,7 +217,7 @@ static int show_tree_long(const struct object_id *oid, struct strbuf *base, if (type == OBJ_BLOB) { unsigned long size; - if (oid_object_info(the_repository, oid, &size) == OBJ_BAD) + if (odb_read_object_info(the_repository->objects, oid, &size) == OBJ_BAD) xsnprintf(size_text, sizeof(size_text), "BAD"); else xsnprintf(size_text, sizeof(size_text), diff --git a/builtin/mktree.c b/builtin/mktree.c index 016b0e5b22..81df7f6099 100644 --- a/builtin/mktree.c +++ b/builtin/mktree.c @@ -124,10 +124,10 @@ static void mktree_line(char *buf, int nul_term_line, int allow_missing) /* Check the type of object identified by oid without fetching objects */ oi.typep = &obj_type; - if (oid_object_info_extended(the_repository, &oid, &oi, - OBJECT_INFO_LOOKUP_REPLACE | - OBJECT_INFO_QUICK | - OBJECT_INFO_SKIP_FETCH_OBJECT) < 0) + if (odb_read_object_info_extended(the_repository->objects, &oid, &oi, + OBJECT_INFO_LOOKUP_REPLACE | + OBJECT_INFO_QUICK | + OBJECT_INFO_SKIP_FETCH_OBJECT) < 0) obj_type = -1; if (obj_type < 0) { diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 99b63cb098..da35d68408 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2154,10 +2154,10 @@ static void prefetch_to_pack(uint32_t object_index_start) { for (i = object_index_start; i < to_pack.nr_objects; i++) { struct object_entry *entry = to_pack.objects + i; - if (!oid_object_info_extended(the_repository, - &entry->idx.oid, - NULL, - OBJECT_INFO_FOR_PREFETCH)) + if (!odb_read_object_info_extended(the_repository->objects, + &entry->idx.oid, + NULL, + OBJECT_INFO_FOR_PREFETCH)) continue; oid_array_append(&to_fetch, &entry->idx.oid); } @@ -2298,19 +2298,19 @@ static void check_object(struct object_entry *entry, uint32_t object_index) /* * No choice but to fall back to the recursive delta walk - * with oid_object_info() to find about the object type + * with odb_read_object_info() to find about the object type * at this point... */ give_up: unuse_pack(&w_curs); } - if (oid_object_info_extended(the_repository, &entry->idx.oid, &oi, - OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_LOOKUP_REPLACE) < 0) { + if (odb_read_object_info_extended(the_repository->objects, &entry->idx.oid, &oi, + OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_LOOKUP_REPLACE) < 0) { if (repo_has_promisor_remote(the_repository)) { prefetch_to_pack(object_index); - if (oid_object_info_extended(the_repository, &entry->idx.oid, &oi, - OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_LOOKUP_REPLACE) < 0) + if (odb_read_object_info_extended(the_repository->objects, &entry->idx.oid, &oi, + OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_LOOKUP_REPLACE) < 0) type = -1; } else { type = -1; @@ -2384,12 +2384,13 @@ static void drop_reused_delta(struct object_entry *entry) if (packed_object_info(the_repository, IN_PACK(entry), entry->in_pack_offset, &oi) < 0) { /* * We failed to get the info from this pack for some reason; - * fall back to oid_object_info, which may find another copy. + * fall back to odb_read_object_info, which may find another copy. * And if that fails, the error will be recorded in oe_type(entry) * and dealt with in prepare_pack(). */ oe_set_type(entry, - oid_object_info(the_repository, &entry->idx.oid, &size)); + odb_read_object_info(the_repository->objects, + &entry->idx.oid, &size)); } else { oe_set_type(entry, type); } @@ -2677,7 +2678,8 @@ unsigned long oe_get_size_slow(struct packing_data *pack, if (e->type_ != OBJ_OFS_DELTA && e->type_ != OBJ_REF_DELTA) { packing_data_lock(&to_pack); - if (oid_object_info(the_repository, &e->idx.oid, &size) < 0) + if (odb_read_object_info(the_repository->objects, + &e->idx.oid, &size) < 0) die(_("unable to get size of %s"), oid_to_hex(&e->idx.oid)); packing_data_unlock(&to_pack); @@ -4063,7 +4065,7 @@ static void add_objects_in_unpacked_packs(void) static int add_loose_object(const struct object_id *oid, const char *path, void *data UNUSED) { - enum object_type type = oid_object_info(the_repository, oid, NULL); + enum object_type type = odb_read_object_info(the_repository->objects, oid, NULL); if (type < 0) { warning(_("loose object at %s could not be examined"), path); @@ -4449,7 +4451,7 @@ static int option_parse_cruft_expiration(const struct option *opt UNUSED, static int is_not_in_promisor_pack_obj(struct object *obj, void *data UNUSED) { struct object_info info = OBJECT_INFO_INIT; - if (oid_object_info_extended(the_repository, &obj->oid, &info, 0)) + if (odb_read_object_info_extended(the_repository->objects, &obj->oid, &info, 0)) BUG("should_include_obj should only be called on existing objects"); return info.whence != OI_PACKED || !info.u.packed.pack->pack_promisor; } diff --git a/builtin/prune.c b/builtin/prune.c index 7bbfb14c2b..339017c7cc 100644 --- a/builtin/prune.c +++ b/builtin/prune.c @@ -99,8 +99,8 @@ static int prune_object(const struct object_id *oid, const char *fullpath, if (st.st_mtime > expire) return 0; if (show_only || verbose) { - enum object_type type = oid_object_info(the_repository, oid, - NULL); + enum object_type type = odb_read_object_info(the_repository->objects, + oid, NULL); printf("%s %s\n", oid_to_hex(oid), (type > 0) ? type_name(type) : "unknown"); } diff --git a/builtin/repack.c b/builtin/repack.c index 8145474cf8..a89c2b704f 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -707,7 +707,7 @@ static int midx_snapshot_ref_one(const char *refname UNUSED, if (oidset_insert(&data->seen, oid)) return 0; /* already seen */ - if (oid_object_info(the_repository, oid, NULL) != OBJ_COMMIT) + if (odb_read_object_info(the_repository->objects, oid, NULL) != OBJ_COMMIT) return 0; fprintf(data->f->fp, "%s%s\n", data->preferred ? "+" : "", diff --git a/builtin/replace.c b/builtin/replace.c index 11c7e2d4c0..5ff2ab723c 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -65,8 +65,8 @@ static int show_reference(const char *refname, if (repo_get_oid(data->repo, refname, &object)) return error(_("failed to resolve '%s' as a valid ref"), refname); - obj_type = oid_object_info(data->repo, &object, NULL); - repl_type = oid_object_info(data->repo, oid, NULL); + obj_type = odb_read_object_info(data->repo->objects, &object, NULL); + repl_type = odb_read_object_info(data->repo->objects, oid, NULL); printf("%s (%s) -> %s (%s)\n", refname, type_name(obj_type), oid_to_hex(oid), type_name(repl_type)); @@ -185,8 +185,8 @@ static int replace_object_oid(const char *object_ref, struct strbuf err = STRBUF_INIT; int res = 0; - obj_type = oid_object_info(the_repository, object, NULL); - repl_type = oid_object_info(the_repository, repl, NULL); + obj_type = odb_read_object_info(the_repository->objects, object, NULL); + repl_type = odb_read_object_info(the_repository->objects, repl, NULL); if (!force && obj_type != repl_type) return error(_("Objects must be of the same type.\n" "'%s' points to a replaced object of type '%s'\n" @@ -334,7 +334,7 @@ static int edit_and_replace(const char *object_ref, int force, int raw) if (repo_get_oid(the_repository, object_ref, &old_oid) < 0) return error(_("not a valid object name: '%s'"), object_ref); - type = oid_object_info(the_repository, &old_oid, NULL); + type = odb_read_object_info(the_repository->objects, &old_oid, NULL); if (type < 0) return error(_("unable to get object type for %s"), oid_to_hex(&old_oid)); diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 0ee37a32cb..4d0c460f18 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -110,7 +110,8 @@ static off_t get_object_disk_usage(struct object *obj) off_t size; struct object_info oi = OBJECT_INFO_INIT; oi.disk_sizep = &size; - if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0) + if (odb_read_object_info_extended(the_repository->objects, + &obj->oid, &oi, 0) < 0) die(_("unable to get disk usage of %s"), oid_to_hex(&obj->oid)); return size; } @@ -346,7 +347,8 @@ static void show_commit(struct commit *commit, void *data) static int finish_object(struct object *obj, const char *name, void *cb_data) { struct rev_list_info *info = cb_data; - if (oid_object_info_extended(the_repository, &obj->oid, NULL, 0) < 0) { + if (odb_read_object_info_extended(the_repository->objects, + &obj->oid, NULL, 0) < 0) { finish_object__ma(obj, name); return 1; } diff --git a/builtin/tag.c b/builtin/tag.c index cf2ea4b499..e0b27396c6 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -304,7 +304,7 @@ static void create_tag(const struct object_id *object, const char *object_ref, struct strbuf header = STRBUF_INIT; int should_edit; - type = oid_object_info(the_repository, object, NULL); + type = odb_read_object_info(the_repository->objects, object, NULL); if (type <= OBJ_NONE) die(_("bad object type.")); @@ -401,7 +401,7 @@ static void create_reflog_msg(const struct object_id *oid, struct strbuf *sb) } strbuf_addstr(sb, " ("); - type = oid_object_info(the_repository, oid, NULL); + type = odb_read_object_info(the_repository->objects, oid, NULL); switch (type) { default: strbuf_addstr(sb, "object of unknown type"); diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 7bf395eec8..405e78bc59 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -232,7 +232,7 @@ static int check_object(struct object *obj, enum object_type type, if (!(obj->flags & FLAG_OPEN)) { unsigned long size; - int type = oid_object_info(the_repository, &obj->oid, &size); + int type = odb_read_object_info(the_repository->objects, &obj->oid, &size); if (type != obj->type || type <= 0) die("object of unexpected type"); obj->flags |= FLAG_WRITTEN; diff --git a/commit-graph.c b/commit-graph.c index 59265f8938..5f482d3377 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1862,7 +1862,7 @@ static int add_ref_to_set(const char *refname UNUSED, if (!peel_iterated_oid(the_repository, oid, &peeled)) oid = &peeled; - if (oid_object_info(the_repository, oid, NULL) == OBJ_COMMIT) + if (odb_read_object_info(the_repository->objects, oid, NULL) == OBJ_COMMIT) oidset_insert(data->commits, oid); display_progress(data->progress, oidset_size(data->commits)); diff --git a/commit.c b/commit.c index aa65183d8b..d4aa9c7a5f 100644 --- a/commit.c +++ b/commit.c @@ -585,7 +585,8 @@ int repo_parse_commit_internal(struct repository *r, return 0; } - if (oid_object_info_extended(r, &item->object.oid, &oi, flags) < 0) + if (odb_read_object_info_extended(r->objects, &item->object.oid, + &oi, flags) < 0) return quiet_on_missing ? -1 : error("Could not read %s", oid_to_hex(&item->object.oid)); diff --git a/diff.c b/diff.c index 3af108115b..dca87e164f 100644 --- a/diff.c +++ b/diff.c @@ -4230,14 +4230,14 @@ int diff_populate_filespec(struct repository *r, info.contentp = &s->data; if (options && options->missing_object_cb) { - if (!oid_object_info_extended(r, &s->oid, &info, - OBJECT_INFO_LOOKUP_REPLACE | - OBJECT_INFO_SKIP_FETCH_OBJECT)) + if (!odb_read_object_info_extended(r->objects, &s->oid, &info, + OBJECT_INFO_LOOKUP_REPLACE | + OBJECT_INFO_SKIP_FETCH_OBJECT)) goto object_read; options->missing_object_cb(options->missing_object_data); } - if (oid_object_info_extended(r, &s->oid, &info, - OBJECT_INFO_LOOKUP_REPLACE)) + if (odb_read_object_info_extended(r->objects, &s->oid, &info, + OBJECT_INFO_LOOKUP_REPLACE)) die("unable to read %s", oid_to_hex(&s->oid)); object_read: @@ -4252,8 +4252,8 @@ object_read: } if (!info.contentp) { info.contentp = &s->data; - if (oid_object_info_extended(r, &s->oid, &info, - OBJECT_INFO_LOOKUP_REPLACE)) + if (odb_read_object_info_extended(r->objects, &s->oid, &info, + OBJECT_INFO_LOOKUP_REPLACE)) die("unable to read %s", oid_to_hex(&s->oid)); } s->should_free = 1; @@ -7019,8 +7019,8 @@ void diff_add_if_missing(struct repository *r, { if (filespec && filespec->oid_valid && !S_ISGITLINK(filespec->mode) && - oid_object_info_extended(r, &filespec->oid, NULL, - OBJECT_INFO_FOR_PREFETCH)) + odb_read_object_info_extended(r->objects, &filespec->oid, NULL, + OBJECT_INFO_FOR_PREFETCH)) oid_array_append(to_fetch, &filespec->oid); } diff --git a/fetch-pack.c b/fetch-pack.c index 47fa7fa4c4..0f5de1c94d 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -149,8 +149,8 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid, } while (1) { - if (oid_object_info_extended(the_repository, oid, &info, - OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK)) + if (odb_read_object_info_extended(the_repository->objects, oid, &info, + OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK)) return NULL; if (type == OBJ_TAG) { struct tag *tag = (struct tag *) diff --git a/list-objects-filter.c b/list-objects-filter.c index 80fe48a52c..7ecd4d9ef5 100644 --- a/list-objects-filter.c +++ b/list-objects-filter.c @@ -310,7 +310,7 @@ static enum list_objects_filter_result filter_blobs_limit( assert(obj->type == OBJ_BLOB); assert((obj->flags & SEEN) == 0); - t = oid_object_info(r, &obj->oid, &object_length); + t = odb_read_object_info(r->objects, &obj->oid, &object_length); if (t != OBJ_BLOB) { /* probably OBJ_NONE */ /* * We DO NOT have the blob locally, so we cannot diff --git a/log-tree.c b/log-tree.c index 1d05dc1c70..233bf9f227 100644 --- a/log-tree.c +++ b/log-tree.c @@ -176,7 +176,7 @@ static int add_ref_decoration(const char *refname, const char *referent UNUSED, return 0; } - objtype = oid_object_info(the_repository, oid, NULL); + objtype = odb_read_object_info(the_repository->objects, oid, NULL); if (objtype < 0) return 0; obj = lookup_object_by_type(the_repository, oid, objtype); diff --git a/merge-ort.c b/merge-ort.c index 9f693ab1d3..f29417040c 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -4385,8 +4385,8 @@ static void prefetch_for_content_merges(struct merge_options *opt, if ((ci->filemask & side_mask) && S_ISREG(vi->mode) && - oid_object_info_extended(opt->repo, &vi->oid, NULL, - OBJECT_INFO_FOR_PREFETCH)) + odb_read_object_info_extended(opt->repo->objects, &vi->oid, NULL, + OBJECT_INFO_FOR_PREFETCH)) oid_array_append(&to_fetch, &vi->oid); } } diff --git a/object-file.c b/object-file.c index 04da19a1a3..3d674d1093 100644 --- a/object-file.c +++ b/object-file.c @@ -1108,7 +1108,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime) oi.typep = &type; oi.sizep = &len; oi.contentp = &buf; - if (oid_object_info_extended(the_repository, oid, &oi, 0)) + if (odb_read_object_info_extended(the_repository->objects, oid, &oi, 0)) return error(_("cannot read object for %s"), oid_to_hex(oid)); if (compat) { if (repo_oid_to_algop(repo, oid, compat, &compat_oid)) diff --git a/object-file.h b/object-file.h index 5066638f8e..67b4ffc480 100644 --- a/object-file.h +++ b/object-file.h @@ -8,7 +8,7 @@ struct index_state; /* - * Set this to 0 to prevent oid_object_info_extended() from fetching missing + * Set this to 0 to prevent odb_read_object_info_extended() from fetching missing * blobs. This has a difference only if extensions.partialClone is set. * * Its default value is 1. diff --git a/object-name.c b/object-name.c index 381536e900..e225eb602c 100644 --- a/object-name.c +++ b/object-name.c @@ -251,7 +251,7 @@ static int disambiguate_commit_only(struct repository *r, const struct object_id *oid, void *cb_data UNUSED) { - int kind = oid_object_info(r, oid, NULL); + int kind = odb_read_object_info(r->objects, oid, NULL); return kind == OBJ_COMMIT; } @@ -262,7 +262,7 @@ static int disambiguate_committish_only(struct repository *r, struct object *obj; int kind; - kind = oid_object_info(r, oid, NULL); + kind = odb_read_object_info(r->objects, oid, NULL); if (kind == OBJ_COMMIT) return 1; if (kind != OBJ_TAG) @@ -279,7 +279,7 @@ static int disambiguate_tree_only(struct repository *r, const struct object_id *oid, void *cb_data UNUSED) { - int kind = oid_object_info(r, oid, NULL); + int kind = odb_read_object_info(r->objects, oid, NULL); return kind == OBJ_TREE; } @@ -290,7 +290,7 @@ static int disambiguate_treeish_only(struct repository *r, struct object *obj; int kind; - kind = oid_object_info(r, oid, NULL); + kind = odb_read_object_info(r->objects, oid, NULL); if (kind == OBJ_TREE || kind == OBJ_COMMIT) return 1; if (kind != OBJ_TAG) @@ -307,7 +307,7 @@ static int disambiguate_blob_only(struct repository *r, const struct object_id *oid, void *cb_data UNUSED) { - int kind = oid_object_info(r, oid, NULL); + int kind = odb_read_object_info(r->objects, oid, NULL); return kind == OBJ_BLOB; } @@ -399,7 +399,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data) return 0; hash = repo_find_unique_abbrev(ds->repo, oid, DEFAULT_ABBREV); - type = oid_object_info(ds->repo, oid, NULL); + type = odb_read_object_info(ds->repo->objects, oid, NULL); if (type < 0) { /* @@ -514,8 +514,8 @@ static int sort_ambiguous(const void *va, const void *vb, void *ctx) { struct repository *sort_ambiguous_repo = ctx; const struct object_id *a = va, *b = vb; - int a_type = oid_object_info(sort_ambiguous_repo, a, NULL); - int b_type = oid_object_info(sort_ambiguous_repo, b, NULL); + int a_type = odb_read_object_info(sort_ambiguous_repo->objects, a, NULL); + int b_type = odb_read_object_info(sort_ambiguous_repo->objects, b, NULL); int a_type_sort; int b_type_sort; diff --git a/object.c b/object.c index 3b15469139..868d89eed4 100644 --- a/object.c +++ b/object.c @@ -214,7 +214,7 @@ enum peel_status peel_object(struct repository *r, struct object *o = lookup_unknown_object(r, name); if (o->type == OBJ_NONE) { - int type = oid_object_info(r, name, NULL); + int type = odb_read_object_info(r->objects, name, NULL); if (type < 0 || !object_as_type(o, type, 0)) return PEEL_INVALID; } @@ -315,7 +315,7 @@ struct object *parse_object_with_flags(struct repository *r, } if ((!obj || obj->type == OBJ_BLOB) && - oid_object_info(r, oid, NULL) == OBJ_BLOB) { + odb_read_object_info(r->objects, oid, NULL) == OBJ_BLOB) { if (!skip_hash && stream_object_signature(r, repl) < 0) { error(_("hash mismatch %s"), oid_to_hex(oid)); return NULL; @@ -331,7 +331,7 @@ struct object *parse_object_with_flags(struct repository *r, */ if (skip_hash && discard_tree && (!obj || obj->type == OBJ_TREE) && - oid_object_info(r, oid, NULL) == OBJ_TREE) { + odb_read_object_info(r->objects, oid, NULL) == OBJ_TREE) { return &lookup_tree(r, oid)->object; } diff --git a/odb.c b/odb.c index 5a88701550..40eacdfe2d 100644 --- a/odb.c +++ b/odb.c @@ -647,7 +647,7 @@ static int register_all_submodule_sources(struct object_database *odb) return ret; } -static int do_oid_object_info_extended(struct repository *r, +static int do_oid_object_info_extended(struct object_database *odb, const struct object_id *oid, struct object_info *oi, unsigned flags) { @@ -660,7 +660,7 @@ static int do_oid_object_info_extended(struct repository *r, if (flags & OBJECT_INFO_LOOKUP_REPLACE) - real = lookup_replace_object(r, oid); + real = lookup_replace_object(odb->repo, oid); if (is_null_oid(real)) return -1; @@ -668,7 +668,7 @@ static int do_oid_object_info_extended(struct repository *r, if (!oi) oi = &blank_oi; - co = find_cached_object(r->objects, real); + co = find_cached_object(odb, real); if (co) { if (oi->typep) *(oi->typep) = co->type; @@ -677,7 +677,7 @@ static int do_oid_object_info_extended(struct repository *r, if (oi->disk_sizep) *(oi->disk_sizep) = 0; if (oi->delta_base_oid) - oidclr(oi->delta_base_oid, r->hash_algo); + oidclr(oi->delta_base_oid, odb->repo->hash_algo); if (oi->contentp) *oi->contentp = xmemdupz(co->buf, co->size); oi->whence = OI_CACHED; @@ -685,17 +685,17 @@ static int do_oid_object_info_extended(struct repository *r, } while (1) { - if (find_pack_entry(r, real, &e)) + if (find_pack_entry(odb->repo, real, &e)) break; /* Most likely it's a loose object. */ - if (!loose_object_info(r, real, oi, flags)) + if (!loose_object_info(odb->repo, real, oi, flags)) return 0; /* Not a loose object; someone else may have just packed it. */ if (!(flags & OBJECT_INFO_QUICK)) { - reprepare_packed_git(r); - if (find_pack_entry(r, real, &e)) + reprepare_packed_git(odb->repo); + if (find_pack_entry(odb->repo, real, &e)) break; } @@ -705,15 +705,15 @@ static int do_oid_object_info_extended(struct repository *r, * `odb_add_submodule_source_by_path()` on that submodule's * ODB). If any such ODBs exist, register them and try again. */ - if (register_all_submodule_sources(r->objects)) + if (register_all_submodule_sources(odb)) /* We added some alternates; retry */ continue; /* Check if it is a missing object */ - if (fetch_if_missing && repo_has_promisor_remote(r) && + if (fetch_if_missing && repo_has_promisor_remote(odb->repo) && !already_retried && !(flags & OBJECT_INFO_SKIP_FETCH_OBJECT)) { - promisor_remote_get_direct(r, real, 1); + promisor_remote_get_direct(odb->repo, real, 1); already_retried = 1; continue; } @@ -723,7 +723,7 @@ static int do_oid_object_info_extended(struct repository *r, if ((flags & OBJECT_INFO_LOOKUP_REPLACE) && !oideq(real, oid)) die(_("replacement %s not found for %s"), oid_to_hex(real), oid_to_hex(oid)); - if ((p = has_packed_and_bad(r, real))) + if ((p = has_packed_and_bad(odb->repo, real))) die(_("packed object %s (stored in %s) is corrupt"), oid_to_hex(real), p->pack_name); } @@ -736,10 +736,10 @@ static int do_oid_object_info_extended(struct repository *r, * information below, so return early. */ return 0; - rtype = packed_object_info(r, e.p, e.offset, oi); + rtype = packed_object_info(odb->repo, e.p, e.offset, oi); if (rtype < 0) { mark_bad_packed_object(e.p, real); - return do_oid_object_info_extended(r, real, oi, 0); + return do_oid_object_info_extended(odb, real, oi, 0); } else if (oi->whence == OI_PACKED) { oi->u.packed.offset = e.offset; oi->u.packed.pack = e.p; @@ -787,7 +787,7 @@ static int oid_object_info_convert(struct repository *r, oi = &new_oi; } - ret = oid_object_info_extended(r, &oid, oi, flags); + ret = odb_read_object_info_extended(r->objects, &oid, oi, flags); if (ret) return -1; if (oi == input_oi) @@ -830,33 +830,35 @@ static int oid_object_info_convert(struct repository *r, return ret; } -int oid_object_info_extended(struct repository *r, const struct object_id *oid, - struct object_info *oi, unsigned flags) +int odb_read_object_info_extended(struct object_database *odb, + const struct object_id *oid, + struct object_info *oi, + unsigned flags) { int ret; - if (oid->algo && (hash_algo_by_ptr(r->hash_algo) != oid->algo)) - return oid_object_info_convert(r, oid, oi, flags); + if (oid->algo && (hash_algo_by_ptr(odb->repo->hash_algo) != oid->algo)) + return oid_object_info_convert(odb->repo, oid, oi, flags); obj_read_lock(); - ret = do_oid_object_info_extended(r, oid, oi, flags); + ret = do_oid_object_info_extended(odb, oid, oi, flags); obj_read_unlock(); return ret; } /* returns enum object_type or negative */ -int oid_object_info(struct repository *r, - const struct object_id *oid, - unsigned long *sizep) +int odb_read_object_info(struct object_database *odb, + const struct object_id *oid, + unsigned long *sizep) { enum object_type type; struct object_info oi = OBJECT_INFO_INIT; oi.typep = &type; oi.sizep = sizep; - if (oid_object_info_extended(r, oid, &oi, - OBJECT_INFO_LOOKUP_REPLACE) < 0) + if (odb_read_object_info_extended(odb, oid, &oi, + OBJECT_INFO_LOOKUP_REPLACE) < 0) return -1; return type; } @@ -887,7 +889,7 @@ int pretend_object_file(struct repository *repo, /* * This function dies on corrupt objects; the callers who want to - * deal with them should arrange to call oid_object_info_extended() and give + * deal with them should arrange to call odb_read_object_info_extended() and give * error messages themselves. */ void *repo_read_object_file(struct repository *r, @@ -902,7 +904,7 @@ void *repo_read_object_file(struct repository *r, oi.typep = type; oi.sizep = size; oi.contentp = &data; - if (oid_object_info_extended(r, oid, &oi, flags)) + if (odb_read_object_info_extended(r->objects, oid, &oi, flags)) return NULL; return data; @@ -968,13 +970,13 @@ int has_object(struct repository *r, const struct object_id *oid, if (!(flags & HAS_OBJECT_FETCH_PROMISOR)) object_info_flags |= OBJECT_INFO_SKIP_FETCH_OBJECT; - return oid_object_info_extended(r, oid, NULL, object_info_flags) >= 0; + return odb_read_object_info_extended(r->objects, oid, NULL, object_info_flags) >= 0; } void odb_assert_oid_type(struct object_database *odb, const struct object_id *oid, enum object_type expect) { - enum object_type type = oid_object_info(odb->repo, oid, NULL); + enum object_type type = odb_read_object_info(odb, oid, NULL); if (type < 0) die(_("%s is not a valid object"), oid_to_hex(oid)); if (type != expect) diff --git a/odb.h b/odb.h index 0ea9d4faa7..b37a9c5d20 100644 --- a/odb.h +++ b/odb.h @@ -265,9 +265,6 @@ void *repo_read_object_file(struct repository *r, enum object_type *type, unsigned long *size); -/* Read and unpack an object file into memory, write memory to an object file */ -int oid_object_info(struct repository *r, const struct object_id *, unsigned long *); - /* * Add an object file to the in-memory object store, without writing it * to disk. @@ -336,9 +333,24 @@ struct object_info { /* Die if object corruption (not just an object being missing) was detected. */ #define OBJECT_INFO_DIE_IF_CORRUPT 32 -int oid_object_info_extended(struct repository *r, - const struct object_id *, - struct object_info *, unsigned flags); +/* + * Read object info from the object database and populate the `object_info` + * structure. Returns 0 on success, a negative error code otherwise. + */ +int odb_read_object_info_extended(struct object_database *odb, + const struct object_id *oid, + struct object_info *oi, + unsigned flags); + +/* + * Read a subset of object info for the given object ID. Returns an `enum + * object_type` on success, a negative error code otherwise. If successful and + * `sizep` is non-NULL, then the size of the object will be written to the + * pointer. + */ +int odb_read_object_info(struct object_database *odb, + const struct object_id *oid, + unsigned long *sizep); enum { /* Retry packed storage after checking packed and loose storage */ @@ -360,7 +372,7 @@ void odb_assert_oid_type(struct object_database *odb, /* * Enabling the object read lock allows multiple threads to safely call the * following functions in parallel: repo_read_object_file(), - * read_object_with_reference(), oid_object_info() and oid_object_info_extended(). + * read_object_with_reference(), odb_read_object_info() and odb(). * * obj_read_lock() and obj_read_unlock() may also be used to protect other * section which cannot execute in parallel with object reading. Since the used @@ -368,7 +380,7 @@ void odb_assert_oid_type(struct object_database *odb, * reading functions. However, beware that in these cases zlib inflation won't * be performed in parallel, losing performance. * - * TODO: oid_object_info_extended()'s call stack has a recursive behavior. If + * TODO: odb_read_object_info_extended()'s call stack has a recursive behavior. If * any of its callees end up calling it, this recursive call won't benefit from * parallel inflation. */ @@ -416,4 +428,22 @@ void *read_object_with_reference(struct repository *r, unsigned long *size, struct object_id *oid_ret); +/* Compatibility wrappers, to be removed once Git 2.51 has been released. */ +#include "repository.h" + +static inline int oid_object_info_extended(struct repository *r, + const struct object_id *oid, + struct object_info *oi, + unsigned flags) +{ + return odb_read_object_info_extended(r->objects, oid, oi, flags); +} + +static inline int oid_object_info(struct repository *r, + const struct object_id *oid, + unsigned long *sizep) +{ + return odb_read_object_info(r->objects, oid, sizep); +} + #endif /* ODB_H */ diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index c847369eaa..c5183b619c 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -144,8 +144,8 @@ void bitmap_writer_build_type_index(struct bitmap_writer *writer, break; default: - real_type = oid_object_info(writer->to_pack->repo, - &entry->idx.oid, NULL); + real_type = odb_read_object_info(writer->to_pack->repo->objects, + &entry->idx.oid, NULL); break; } diff --git a/pack-bitmap.c b/pack-bitmap.c index a695a794e9..bcbb71f750 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1868,8 +1868,8 @@ static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git, size_t eindex_pos = pos - bitmap_num_objects_total(bitmap_git); struct eindex *eindex = &bitmap_git->ext_index; struct object *obj = eindex->objects[eindex_pos]; - if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid, - &oi, 0) < 0) + if (odb_read_object_info_extended(bitmap_repo(bitmap_git)->objects, &obj->oid, + &oi, 0) < 0) die(_("unable to get size of %s"), oid_to_hex(&obj->oid)); } @@ -3220,8 +3220,8 @@ static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git) i))) continue; - if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid, - &oi, 0) < 0) + if (odb_read_object_info_extended(bitmap_repo(bitmap_git)->objects, + &obj->oid, &oi, 0) < 0) die(_("unable to get disk usage of '%s'"), oid_to_hex(&obj->oid)); diff --git a/packfile.c b/packfile.c index ac0e29e99b..af9ccfdba6 100644 --- a/packfile.c +++ b/packfile.c @@ -1321,7 +1321,7 @@ static int retry_bad_packed_offset(struct repository *r, return OBJ_BAD; nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos)); mark_bad_packed_object(p, &oid); - type = oid_object_info(r, &oid, NULL); + type = odb_read_object_info(r->objects, &oid, NULL); if (type <= OBJ_NONE) return OBJ_BAD; return type; @@ -1849,7 +1849,8 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset, oi.typep = &type; oi.sizep = &base_size; oi.contentp = &base; - if (oid_object_info_extended(r, &base_oid, &oi, 0) < 0) + if (odb_read_object_info_extended(r->objects, &base_oid, + &oi, 0) < 0) base = NULL; external_base = base; diff --git a/promisor-remote.c b/promisor-remote.c index 2baa286bfd..be6f82d12f 100644 --- a/promisor-remote.c +++ b/promisor-remote.c @@ -245,8 +245,8 @@ static int remove_fetched_oids(struct repository *repo, struct object_id *new_oids; for (i = 0; i < oid_nr; i++) - if (oid_object_info_extended(repo, &old_oids[i], NULL, - OBJECT_INFO_SKIP_FETCH_OBJECT)) { + if (odb_read_object_info_extended(repo->objects, &old_oids[i], NULL, + OBJECT_INFO_SKIP_FETCH_OBJECT)) { remaining[i] = 1; remaining_nr++; } diff --git a/protocol-caps.c b/protocol-caps.c index 3022f69a1b..ecdd0dc58d 100644 --- a/protocol-caps.c +++ b/protocol-caps.c @@ -64,7 +64,7 @@ static void send_info(struct repository *r, struct packet_writer *writer, strbuf_addstr(&send_buffer, oid_str); if (info->size) { - if (oid_object_info(r, &oid, &object_size) < 0) { + if (odb_read_object_info(r->objects, &oid, &object_size) < 0) { strbuf_addstr(&send_buffer, " "); } else { strbuf_addf(&send_buffer, " %lu", object_size); diff --git a/reachable.c b/reachable.c index 9dc748f0b9..e984b68a0c 100644 --- a/reachable.c +++ b/reachable.c @@ -211,7 +211,7 @@ static void add_recent_object(const struct object_id *oid, * later processing, and the revision machinery expects * commits and tags to have been parsed. */ - type = oid_object_info(the_repository, oid, NULL); + type = odb_read_object_info(the_repository->objects, oid, NULL); if (type < 0) die("unable to get object info for %s", oid_to_hex(oid)); diff --git a/read-cache.c b/read-cache.c index c3fa968676..7d5bccf95d 100644 --- a/read-cache.c +++ b/read-cache.c @@ -3729,9 +3729,9 @@ void prefetch_cache_entries(const struct index_state *istate, if (S_ISGITLINK(ce->ce_mode) || !must_prefetch(ce)) continue; - if (!oid_object_info_extended(the_repository, &ce->oid, - NULL, - OBJECT_INFO_FOR_PREFETCH)) + if (!odb_read_object_info_extended(the_repository->objects, + &ce->oid, NULL, + OBJECT_INFO_FOR_PREFETCH)) continue; oid_array_append(&to_fetch, &ce->oid); } diff --git a/ref-filter.c b/ref-filter.c index 4ce45440ad..f9f2c512a8 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -2302,8 +2302,8 @@ static int get_object(struct ref_array_item *ref, int deref, struct object **obj oi->info.sizep = &oi->size; oi->info.typep = &oi->type; } - if (oid_object_info_extended(the_repository, &oi->oid, &oi->info, - OBJECT_INFO_LOOKUP_REPLACE)) + if (odb_read_object_info_extended(the_repository->objects, &oi->oid, &oi->info, + OBJECT_INFO_LOOKUP_REPLACE)) return strbuf_addf_ret(err, -1, _("missing object %s for %s"), oid_to_hex(&oi->oid), ref->refname); if (oi->info.disk_sizep && oi->disk_size < 0) diff --git a/remote.c b/remote.c index 17a842f568..72c36239d3 100644 --- a/remote.c +++ b/remote.c @@ -1182,7 +1182,7 @@ static void show_push_unqualified_ref_name_error(const char *dst_value, BUG("'%s' is not a valid object, " "match_explicit_lhs() should catch this!", matched_src_name); - type = oid_object_info(the_repository, &oid, NULL); + type = odb_read_object_info(the_repository->objects, &oid, NULL); if (type == OBJ_COMMIT) { advise(_("The part of the refspec is a commit object.\n" "Did you mean to create a new branch by pushing to\n" @@ -1412,7 +1412,8 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds continue; /* not a tag */ if (string_list_has_string(&dst_tag, ref->name)) continue; /* they already have it */ - if (oid_object_info(the_repository, &ref->new_oid, NULL) != OBJ_TAG) + if (odb_read_object_info(the_repository->objects, + &ref->new_oid, NULL) != OBJ_TAG) continue; /* be conservative */ item = string_list_append(&src_tag, ref->name); item->util = ref; diff --git a/sequencer.c b/sequencer.c index 2432d0a39e..193459405f 100644 --- a/sequencer.c +++ b/sequencer.c @@ -5503,9 +5503,8 @@ int sequencer_pick_revisions(struct repository *r, if (!repo_get_oid(r, name, &oid)) { if (!lookup_commit_reference_gently(r, &oid, 1)) { - enum object_type type = oid_object_info(r, - &oid, - NULL); + enum object_type type = odb_read_object_info(r->objects, + &oid, NULL); res = error(_("%s: can't cherry-pick a %s"), name, type_name(type)); goto out; diff --git a/streaming.c b/streaming.c index 81c42673a2..4b13827668 100644 --- a/streaming.c +++ b/streaming.c @@ -44,7 +44,7 @@ struct git_istream { union { struct { - char *buf; /* from oid_object_info_extended() */ + char *buf; /* from odb_read_object_info_extended() */ unsigned long read_ptr; } incore; @@ -403,8 +403,8 @@ static int open_istream_incore(struct git_istream *st, struct repository *r, oi.typep = type; oi.sizep = &st->size; oi.contentp = (void **)&st->u.incore.buf; - return oid_object_info_extended(r, oid, &oi, - OBJECT_INFO_DIE_IF_CORRUPT); + return odb_read_object_info_extended(r->objects, oid, &oi, + OBJECT_INFO_DIE_IF_CORRUPT); } /***************************************************************************** @@ -422,7 +422,7 @@ static int istream_source(struct git_istream *st, oi.typep = type; oi.sizep = &size; - status = oid_object_info_extended(r, oid, &oi, 0); + status = odb_read_object_info_extended(r->objects, oid, &oi, 0); if (status < 0) return status; diff --git a/submodule.c b/submodule.c index 788c9e55ed..f8373a9ea7 100644 --- a/submodule.c +++ b/submodule.c @@ -968,7 +968,7 @@ static int check_has_commit(const struct object_id *oid, void *data) return 0; } - type = oid_object_info(&subrepo, oid, NULL); + type = odb_read_object_info(subrepo.objects, oid, NULL); switch (type) { case OBJ_COMMIT: @@ -1752,8 +1752,7 @@ static int fetch_start_failure(struct strbuf *err UNUSED, static int commit_missing_in_sub(const struct object_id *oid, void *data) { struct repository *subrepo = data; - - enum object_type type = oid_object_info(subrepo, oid, NULL); + enum object_type type = odb_read_object_info(subrepo->objects, oid, NULL); return type != OBJ_COMMIT; } diff --git a/t/helper/test-partial-clone.c b/t/helper/test-partial-clone.c index dba227259a..d848800749 100644 --- a/t/helper/test-partial-clone.c +++ b/t/helper/test-partial-clone.c @@ -23,7 +23,7 @@ static void object_info(const char *gitdir, const char *oid_hex) die("could not init repo"); if (parse_oid_hex_algop(oid_hex, &oid, &p, r.hash_algo)) die("could not parse oid"); - if (oid_object_info_extended(&r, &oid, &oi, 0)) + if (odb_read_object_info_extended(r.objects, &oid, &oi, 0)) die("could not obtain object info"); printf("%d\n", (int) size); diff --git a/tag.c b/tag.c index 5f6868bf7b..144048fd5e 100644 --- a/tag.c +++ b/tag.c @@ -52,7 +52,7 @@ int gpg_verify_tag(const struct object_id *oid, const char *name_to_report, unsigned long size; int ret; - type = oid_object_info(the_repository, oid, NULL); + type = odb_read_object_info(the_repository->objects, oid, NULL); if (type != OBJ_TAG) return error("%s: cannot verify a non-tag object of type %s.", name_to_report ? -- cgit v1.2.3 From d4ff88aee3967e5d1ef1237cd9b8792b7cdb304c Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 1 Jul 2025 14:22:26 +0200 Subject: odb: rename `repo_read_object_file()` Rename `repo_read_object_file()` to `odb_read_object()` to match other functions related to the object database and our modern coding guidelines. Introduce a compatibility wrapper so that any in-flight topics will continue to compile. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- apply.c | 10 +++++----- archive.c | 2 +- attr.c | 2 +- bisect.c | 6 +++--- blame.c | 13 ++++++------- builtin/cat-file.c | 26 +++++++++++--------------- builtin/difftool.c | 2 +- builtin/fast-export.c | 6 +++--- builtin/fast-import.c | 8 ++++---- builtin/grep.c | 8 ++++---- builtin/index-pack.c | 8 ++++---- builtin/log.c | 2 +- builtin/merge-tree.c | 12 ++++++------ builtin/mktag.c | 4 ++-- builtin/notes.c | 6 +++--- builtin/pack-objects.c | 30 +++++++++++++++--------------- builtin/tag.c | 4 ++-- builtin/unpack-file.c | 2 +- builtin/unpack-objects.c | 4 ++-- bundle.c | 2 +- combine-diff.c | 2 +- commit.c | 6 +++--- config.c | 2 +- dir.c | 2 +- entry.c | 4 ++-- fmt-merge-msg.c | 4 ++-- fsck.c | 2 +- grep.c | 4 ++-- http-push.c | 4 ++-- mailmap.c | 2 +- match-trees.c | 4 ++-- merge-blobs.c | 8 ++++---- merge-ort.c | 2 +- notes-cache.c | 2 +- notes-merge.c | 2 +- notes.c | 13 +++++++------ object.c | 2 +- odb.c | 19 +++++++------------ odb.h | 29 +++++++++++++++++++++++------ read-cache.c | 6 +++--- reflog.c | 4 ++-- rerere.c | 5 ++--- submodule-config.c | 4 ++-- tag.c | 6 +++--- tree-walk.c | 6 +++--- tree.c | 4 ++-- xdiff-interface.c | 2 +- 47 files changed, 157 insertions(+), 150 deletions(-) (limited to 'commit.c') diff --git a/apply.c b/apply.c index e778b4e911..a34ced0462 100644 --- a/apply.c +++ b/apply.c @@ -3210,8 +3210,8 @@ static int apply_binary(struct apply_state *state, unsigned long size; char *result; - result = repo_read_object_file(the_repository, &oid, &type, - &size); + result = odb_read_object(the_repository->objects, &oid, + &type, &size); if (!result) return error(_("the necessary postimage %s for " "'%s' cannot be read"), @@ -3273,8 +3273,8 @@ static int read_blob_object(struct strbuf *buf, const struct object_id *oid, uns unsigned long sz; char *result; - result = repo_read_object_file(the_repository, oid, &type, - &sz); + result = odb_read_object(the_repository->objects, oid, + &type, &sz); if (!result) return -1; /* XXX read_sha1_file NUL-terminates */ @@ -3503,7 +3503,7 @@ static int resolve_to(struct image *image, const struct object_id *result_id) image_clear(image); - data = repo_read_object_file(the_repository, result_id, &type, &size); + data = odb_read_object(the_repository->objects, result_id, &type, &size); if (!data || type != OBJ_BLOB) die("unable to read blob object %s", oid_to_hex(result_id)); strbuf_attach(&image->buf, data, size, size + 1); diff --git a/archive.c b/archive.c index f2511d530d..f5a9d45c8d 100644 --- a/archive.c +++ b/archive.c @@ -98,7 +98,7 @@ static void *object_file_to_archive(const struct archiver_args *args, (args->tree ? &args->tree->object.oid : NULL), oid); path += args->baselen; - buffer = repo_read_object_file(the_repository, oid, type, sizep); + buffer = odb_read_object(the_repository->objects, oid, type, sizep); if (buffer && S_ISREG(mode)) { struct strbuf buf = STRBUF_INIT; size_t size = 0; diff --git a/attr.c b/attr.c index e5680db7f6..d1daeb0b4d 100644 --- a/attr.c +++ b/attr.c @@ -779,7 +779,7 @@ static struct attr_stack *read_attr_from_blob(struct index_state *istate, if (get_tree_entry(istate->repo, tree_oid, path, &oid, &mode)) return NULL; - buf = repo_read_object_file(istate->repo, &oid, &type, &sz); + buf = odb_read_object(istate->repo->objects, &oid, &type, &sz); if (!buf || type != OBJ_BLOB) { free(buf); return NULL; diff --git a/bisect.c b/bisect.c index a7939216d0..f24474542e 100644 --- a/bisect.c +++ b/bisect.c @@ -155,9 +155,9 @@ static void show_list(const char *debug, int counted, int nr, unsigned commit_flags = commit->object.flags; enum object_type type; unsigned long size; - char *buf = repo_read_object_file(the_repository, - &commit->object.oid, &type, - &size); + char *buf = odb_read_object(the_repository->objects, + &commit->object.oid, &type, + &size); const char *subject_start; int subject_len; diff --git a/blame.c b/blame.c index 97db3355af..858d2d74df 100644 --- a/blame.c +++ b/blame.c @@ -1041,9 +1041,9 @@ static void fill_origin_blob(struct diff_options *opt, &o->blob_oid, 1, &file->ptr, &file_size)) ; else - file->ptr = repo_read_object_file(the_repository, - &o->blob_oid, &type, - &file_size); + file->ptr = odb_read_object(the_repository->objects, + &o->blob_oid, &type, + &file_size); file->size = file_size; if (!file->ptr) @@ -2869,10 +2869,9 @@ void setup_scoreboard(struct blame_scoreboard *sb, &sb->final_buf_size)) ; else - sb->final_buf = repo_read_object_file(the_repository, - &o->blob_oid, - &type, - &sb->final_buf_size); + sb->final_buf = odb_read_object(the_repository->objects, + &o->blob_oid, &type, + &sb->final_buf_size); if (!sb->final_buf) die(_("cannot read blob %s for path %s"), diff --git a/builtin/cat-file.c b/builtin/cat-file.c index f7595fdb04..90a3e159d1 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -74,7 +74,7 @@ static int filter_object(const char *path, unsigned mode, { enum object_type type; - *buf = repo_read_object_file(the_repository, oid, &type, size); + *buf = odb_read_object(the_repository->objects, oid, &type, size); if (!*buf) return error(_("cannot read object %s '%s'"), oid_to_hex(oid), path); @@ -197,8 +197,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) ret = stream_blob(&oid); goto cleanup; } - buf = repo_read_object_file(the_repository, &oid, &type, - &size); + buf = odb_read_object(the_repository->objects, &oid, + &type, &size); if (!buf) die("Cannot read object %s", obj_name); @@ -219,10 +219,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) struct object_id blob_oid; if (odb_read_object_info(the_repository->objects, &oid, NULL) == OBJ_TAG) { - char *buffer = repo_read_object_file(the_repository, - &oid, - &type, - &size); + char *buffer = odb_read_object(the_repository->objects, + &oid, &type, &size); const char *target; if (!buffer) @@ -403,10 +401,8 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d if (!textconv_object(the_repository, data->rest, 0100644, oid, 1, &contents, &size)) - contents = repo_read_object_file(the_repository, - oid, - &type, - &size); + contents = odb_read_object(the_repository->objects, + oid, &type, &size); if (!contents) die("could not convert '%s' %s", oid_to_hex(oid), data->rest); @@ -423,8 +419,8 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d unsigned long size; void *contents; - contents = repo_read_object_file(the_repository, oid, &type, - &size); + contents = odb_read_object(the_repository->objects, oid, + &type, &size); if (!contents) die("object %s disappeared", oid_to_hex(oid)); @@ -533,8 +529,8 @@ static void batch_object_write(const char *obj_name, size_t s = data->size; char *buf = NULL; - buf = repo_read_object_file(the_repository, &data->oid, &data->type, - &data->size); + buf = odb_read_object(the_repository->objects, &data->oid, + &data->type, &data->size); if (!buf) die(_("unable to read %s"), oid_to_hex(&data->oid)); buf = replace_idents_using_mailmap(buf, &s); diff --git a/builtin/difftool.c b/builtin/difftool.c index fac613e3bc..e4bc1f8316 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -320,7 +320,7 @@ static char *get_symlink(struct repository *repo, } else { enum object_type type; unsigned long size; - data = repo_read_object_file(repo, oid, &type, &size); + data = odb_read_object(repo->objects, oid, &type, &size); if (!data) die(_("could not read object %s for symlink %s"), oid_to_hex(oid), path); diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 6c93cf0a8a..33f304dd0a 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -323,7 +323,7 @@ static void export_blob(const struct object_id *oid) object = (struct object *)lookup_blob(the_repository, oid); eaten = 0; } else { - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf) die("could not read blob %s", oid_to_hex(oid)); if (check_object_signature(the_repository, oid, buf, size, @@ -869,8 +869,8 @@ static void handle_tag(const char *name, struct tag *tag) return; } - buf = repo_read_object_file(the_repository, &tag->object.oid, &type, - &size); + buf = odb_read_object(the_repository->objects, &tag->object.oid, + &type, &size); if (!buf) die("could not read tag %s", oid_to_hex(&tag->object.oid)); message = memmem(buf, size, "\n\n", 2); diff --git a/builtin/fast-import.c b/builtin/fast-import.c index 2718376f2c..1973c504e2 100644 --- a/builtin/fast-import.c +++ b/builtin/fast-import.c @@ -1265,7 +1265,7 @@ static void load_tree(struct tree_entry *root) die("Can't load tree %s", oid_to_hex(oid)); } else { enum object_type type; - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf || type != OBJ_TREE) die("Can't load tree %s", oid_to_hex(oid)); } @@ -3002,7 +3002,7 @@ static void cat_blob(struct object_entry *oe, struct object_id *oid) char *buf; if (!oe || oe->pack_id == MAX_PACK_ID) { - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); } else { type = oe->type; buf = gfi_unpack_entry(oe, &size); @@ -3110,8 +3110,8 @@ static struct object_entry *dereference(struct object_entry *oe, buf = gfi_unpack_entry(oe, &size); } else { enum object_type unused; - buf = repo_read_object_file(the_repository, oid, &unused, - &size); + buf = odb_read_object(the_repository->objects, oid, + &unused, &size); } if (!buf) die("Can't load object %s", oid_to_hex(oid)); diff --git a/builtin/grep.c b/builtin/grep.c index 1435d462cd..5de61dfffe 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -573,8 +573,8 @@ static int grep_cache(struct grep_opt *opt, void *data; unsigned long size; - data = repo_read_object_file(the_repository, &ce->oid, - &type, &size); + data = odb_read_object(the_repository->objects, &ce->oid, + &type, &size); if (!data) die(_("unable to read tree %s"), oid_to_hex(&ce->oid)); init_tree_desc(&tree, &ce->oid, data, size); @@ -666,8 +666,8 @@ static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec, void *data; unsigned long size; - data = repo_read_object_file(the_repository, - &entry.oid, &type, &size); + data = odb_read_object(the_repository->objects, + &entry.oid, &type, &size); if (!data) die(_("unable to read tree (%s)"), oid_to_hex(&entry.oid)); diff --git a/builtin/index-pack.c b/builtin/index-pack.c index d0b1690812..180d261f6c 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -914,8 +914,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, die(_("cannot read existing object info %s"), oid_to_hex(oid)); if (has_type != type || has_size != size) die(_("SHA1 COLLISION FOUND WITH %s !"), oid_to_hex(oid)); - has_data = repo_read_object_file(the_repository, oid, - &has_type, &has_size); + has_data = odb_read_object(the_repository->objects, oid, + &has_type, &has_size); read_unlock(); if (!data) data = new_data = get_data_from_pack(obj_entry); @@ -1521,8 +1521,8 @@ static void fix_unresolved_deltas(struct hashfile *f) if (objects[d->obj_no].real_type != OBJ_REF_DELTA) continue; - data = repo_read_object_file(the_repository, &d->oid, &type, - &size); + data = odb_read_object(the_repository->objects, &d->oid, + &type, &size); if (!data) continue; diff --git a/builtin/log.c b/builtin/log.c index fe9cc5ebec..f2040b1815 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -714,7 +714,7 @@ static int show_tag_object(const struct object_id *oid, struct rev_info *rev) { unsigned long size; enum object_type type; - char *buf = repo_read_object_file(the_repository, oid, &type, &size); + char *buf = odb_read_object(the_repository->objects, oid, &type, &size); unsigned long offset = 0; if (!buf) diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c index b1a17787bc..cf8b06cadc 100644 --- a/builtin/merge-tree.c +++ b/builtin/merge-tree.c @@ -75,9 +75,9 @@ static void *result(struct merge_list *entry, unsigned long *size) const char *path = entry->path; if (!entry->stage) - return repo_read_object_file(the_repository, - &entry->blob->object.oid, &type, - size); + return odb_read_object(the_repository->objects, + &entry->blob->object.oid, &type, + size); base = NULL; if (entry->stage == 1) { base = entry->blob; @@ -100,9 +100,9 @@ static void *origin(struct merge_list *entry, unsigned long *size) enum object_type type; while (entry) { if (entry->stage == 2) - return repo_read_object_file(the_repository, - &entry->blob->object.oid, - &type, size); + return odb_read_object(the_repository->objects, + &entry->blob->object.oid, + &type, size); entry = entry->link; } return NULL; diff --git a/builtin/mktag.c b/builtin/mktag.c index 1809b38f93..1b391119de 100644 --- a/builtin/mktag.c +++ b/builtin/mktag.c @@ -54,8 +54,8 @@ static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type) void *buffer; const struct object_id *repl; - buffer = repo_read_object_file(the_repository, tagged_oid, &type, - &size); + buffer = odb_read_object(the_repository->objects, tagged_oid, + &type, &size); if (!buffer) die(_("could not read tagged object '%s'"), oid_to_hex(tagged_oid)); diff --git a/builtin/notes.c b/builtin/notes.c index 783d4932ca..a9529b1696 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -152,7 +152,7 @@ static void copy_obj_to_fd(int fd, const struct object_id *oid) { unsigned long size; enum object_type type; - char *buf = repo_read_object_file(the_repository, oid, &type, &size); + char *buf = odb_read_object(the_repository->objects, oid, &type, &size); if (buf) { if (size) write_or_die(fd, buf, size); @@ -319,7 +319,7 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset) strbuf_init(&msg->buf, 0); if (repo_get_oid(the_repository, arg, &object)) die(_("failed to resolve '%s' as a valid ref."), arg); - if (!(value = repo_read_object_file(the_repository, &object, &type, &len))) + if (!(value = odb_read_object(the_repository->objects, &object, &type, &len))) die(_("failed to read object '%s'."), arg); if (type != OBJ_BLOB) { strbuf_release(&msg->buf); @@ -722,7 +722,7 @@ static int append_edit(int argc, const char **argv, const char *prefix, unsigned long size; enum object_type type; struct strbuf buf = STRBUF_INIT; - char *prev_buf = repo_read_object_file(the_repository, note, &type, &size); + char *prev_buf = odb_read_object(the_repository->objects, note, &type, &size); if (!prev_buf) die(_("unable to read %s"), oid_to_hex(note)); diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index da35d68408..580a5c1996 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -337,13 +337,13 @@ static void *get_delta(struct object_entry *entry) void *buf, *base_buf, *delta_buf; enum object_type type; - buf = repo_read_object_file(the_repository, &entry->idx.oid, &type, - &size); + buf = odb_read_object(the_repository->objects, &entry->idx.oid, + &type, &size); if (!buf) die(_("unable to read %s"), oid_to_hex(&entry->idx.oid)); - base_buf = repo_read_object_file(the_repository, - &DELTA(entry)->idx.oid, &type, - &base_size); + base_buf = odb_read_object(the_repository->objects, + &DELTA(entry)->idx.oid, &type, + &base_size); if (!base_buf) die("unable to read %s", oid_to_hex(&DELTA(entry)->idx.oid)); @@ -506,9 +506,9 @@ static unsigned long write_no_reuse_object(struct hashfile *f, struct object_ent &size, NULL)) != NULL) buf = NULL; else { - buf = repo_read_object_file(the_repository, - &entry->idx.oid, &type, - &size); + buf = odb_read_object(the_repository->objects, + &entry->idx.oid, &type, + &size); if (!buf) die(_("unable to read %s"), oid_to_hex(&entry->idx.oid)); @@ -1895,7 +1895,7 @@ static struct pbase_tree_cache *pbase_tree_get(const struct object_id *oid) /* Did not find one. Either we got a bogus request or * we need to read and perhaps cache. */ - data = repo_read_object_file(the_repository, oid, &type, &size); + data = odb_read_object(the_repository->objects, oid, &type, &size); if (!data) return NULL; if (type != OBJ_TREE) { @@ -2762,9 +2762,9 @@ static int try_delta(struct unpacked *trg, struct unpacked *src, /* Load data if not already done */ if (!trg->data) { packing_data_lock(&to_pack); - trg->data = repo_read_object_file(the_repository, - &trg_entry->idx.oid, &type, - &sz); + trg->data = odb_read_object(the_repository->objects, + &trg_entry->idx.oid, &type, + &sz); packing_data_unlock(&to_pack); if (!trg->data) die(_("object %s cannot be read"), @@ -2777,9 +2777,9 @@ static int try_delta(struct unpacked *trg, struct unpacked *src, } if (!src->data) { packing_data_lock(&to_pack); - src->data = repo_read_object_file(the_repository, - &src_entry->idx.oid, &type, - &sz); + src->data = odb_read_object(the_repository->objects, + &src_entry->idx.oid, &type, + &sz); packing_data_unlock(&to_pack); if (!src->data) { if (src_entry->preferred_base) { diff --git a/builtin/tag.c b/builtin/tag.c index e0b27396c6..46cbf892e3 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -244,7 +244,7 @@ static void write_tag_body(int fd, const struct object_id *oid) struct strbuf payload = STRBUF_INIT; struct strbuf signature = STRBUF_INIT; - orig = buf = repo_read_object_file(the_repository, oid, &type, &size); + orig = buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf) return; if (parse_signature(buf, size, &payload, &signature)) { @@ -407,7 +407,7 @@ static void create_reflog_msg(const struct object_id *oid, struct strbuf *sb) strbuf_addstr(sb, "object of unknown type"); break; case OBJ_COMMIT: - if ((buf = repo_read_object_file(the_repository, oid, &type, &size))) { + if ((buf = odb_read_object(the_repository->objects, oid, &type, &size))) { subject_len = find_commit_subject(buf, &subject_start); strbuf_insert(sb, sb->len, subject_start, subject_len); } else { diff --git a/builtin/unpack-file.c b/builtin/unpack-file.c index b92fd4710a..4360872ae0 100644 --- a/builtin/unpack-file.c +++ b/builtin/unpack-file.c @@ -14,7 +14,7 @@ static char *create_temp_file(struct object_id *oid) unsigned long size; int fd; - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf || type != OBJ_BLOB) die("unable to read blob object %s", oid_to_hex(oid)); diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 405e78bc59..4bc6575a57 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -516,8 +516,8 @@ static void unpack_delta_entry(enum object_type type, unsigned long delta_size, if (resolve_against_held(nr, &base_oid, delta_data, delta_size)) return; - base = repo_read_object_file(the_repository, &base_oid, &type, - &base_size); + base = odb_read_object(the_repository->objects, &base_oid, + &type, &base_size); if (!base) { error("failed to read delta-pack base object %s", oid_to_hex(&base_oid)); diff --git a/bundle.c b/bundle.c index e09e3c2f58..717f056a45 100644 --- a/bundle.c +++ b/bundle.c @@ -305,7 +305,7 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) if (revs->max_age == -1 && revs->min_age == -1) goto out; - buf = repo_read_object_file(the_repository, &tag->oid, &type, &size); + buf = odb_read_object(the_repository->objects, &tag->oid, &type, &size); if (!buf) goto out; line = memmem(buf, size, "\ntagger ", 8); diff --git a/combine-diff.c b/combine-diff.c index cf23a75340..4ea2dc93c4 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -325,7 +325,7 @@ static char *grab_blob(struct repository *r, *size = fill_textconv(r, textconv, df, &blob); free_filespec(df); } else { - blob = repo_read_object_file(r, oid, &type, size); + blob = odb_read_object(r->objects, oid, &type, size); if (!blob) die(_("unable to read %s"), oid_to_hex(oid)); if (type != OBJ_BLOB) diff --git a/commit.c b/commit.c index d4aa9c7a5f..28ee6b73ae 100644 --- a/commit.c +++ b/commit.c @@ -374,7 +374,7 @@ const void *repo_get_commit_buffer(struct repository *r, if (!ret) { enum object_type type; unsigned long size; - ret = repo_read_object_file(r, &commit->object.oid, &type, &size); + ret = odb_read_object(r->objects, &commit->object.oid, &type, &size); if (!ret) die("cannot read commit object %s", oid_to_hex(&commit->object.oid)); @@ -1275,8 +1275,8 @@ static void handle_signed_tag(const struct commit *parent, struct commit_extra_h desc = merge_remote_util(parent); if (!desc || !desc->obj) return; - buf = repo_read_object_file(the_repository, &desc->obj->oid, &type, - &size); + buf = odb_read_object(the_repository->objects, &desc->obj->oid, + &type, &size); if (!buf || type != OBJ_TAG) goto free_return; if (!parse_signature(buf, size, &payload, &signature)) diff --git a/config.c b/config.c index 883dd06682..142c37215a 100644 --- a/config.c +++ b/config.c @@ -1942,7 +1942,7 @@ int git_config_from_blob_oid(config_fn_t fn, unsigned long size; int ret; - buf = repo_read_object_file(repo, oid, &type, &size); + buf = odb_read_object(repo->objects, oid, &type, &size); if (!buf) return error(_("unable to load config blob object '%s'"), name); if (type != OBJ_BLOB) { diff --git a/dir.c b/dir.c index a374972b62..cb7bd873b1 100644 --- a/dir.c +++ b/dir.c @@ -302,7 +302,7 @@ static int do_read_blob(const struct object_id *oid, struct oid_stat *oid_stat, *size_out = 0; *data_out = NULL; - data = repo_read_object_file(the_repository, oid, &type, &sz); + data = odb_read_object(the_repository->objects, oid, &type, &sz); if (!data || type != OBJ_BLOB) { free(data); return -1; diff --git a/entry.c b/entry.c index 75d55038d7..cae02eb503 100644 --- a/entry.c +++ b/entry.c @@ -93,8 +93,8 @@ void *read_blob_entry(const struct cache_entry *ce, size_t *size) { enum object_type type; unsigned long ul; - void *blob_data = repo_read_object_file(the_repository, &ce->oid, - &type, &ul); + void *blob_data = odb_read_object(the_repository->objects, &ce->oid, + &type, &ul); *size = ul; if (blob_data) { diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index 1a8c972adf..40174efa3d 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -526,8 +526,8 @@ static void fmt_merge_msg_sigs(struct strbuf *out) struct object_id *oid = origins.items[i].util; enum object_type type; unsigned long size; - char *buf = repo_read_object_file(the_repository, oid, &type, - &size); + char *buf = odb_read_object(the_repository->objects, oid, + &type, &size); char *origbuf = buf; unsigned long len = size; struct signature_check sigc = { NULL }; diff --git a/fsck.c b/fsck.c index e69baab3af..23965e1880 100644 --- a/fsck.c +++ b/fsck.c @@ -1293,7 +1293,7 @@ static int fsck_blobs(struct oidset *blobs_found, struct oidset *blobs_done, if (oidset_contains(blobs_done, oid)) continue; - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf) { if (is_promisor_object(the_repository, oid)) continue; diff --git a/grep.c b/grep.c index dc77e6c463..932647e4a6 100644 --- a/grep.c +++ b/grep.c @@ -1931,8 +1931,8 @@ static int grep_source_load_oid(struct grep_source *gs) { enum object_type type; - gs->buf = repo_read_object_file(gs->repo, gs->identifier, &type, - &gs->size); + gs->buf = odb_read_object(gs->repo->objects, gs->identifier, + &type, &gs->size); if (!gs->buf) return error(_("'%s': unable to read %s"), gs->name, diff --git a/http-push.c b/http-push.c index d1b1bb2371..9481825abf 100644 --- a/http-push.c +++ b/http-push.c @@ -369,8 +369,8 @@ static void start_put(struct transfer_request *request) ssize_t size; git_zstream stream; - unpacked = repo_read_object_file(the_repository, &request->obj->oid, - &type, &len); + unpacked = odb_read_object(the_repository->objects, &request->obj->oid, + &type, &len); hdrlen = format_object_header(hdr, sizeof(hdr), type, len); /* Set it up */ diff --git a/mailmap.c b/mailmap.c index b18e74c211..56c72102d9 100644 --- a/mailmap.c +++ b/mailmap.c @@ -196,7 +196,7 @@ int read_mailmap_blob(struct string_list *map, const char *name) if (repo_get_oid(the_repository, name, &oid) < 0) return 0; - buf = repo_read_object_file(the_repository, &oid, &type, &size); + buf = odb_read_object(the_repository->objects, &oid, &type, &size); if (!buf) return error("unable to read mailmap object at %s", name); if (type != OBJ_BLOB) { diff --git a/match-trees.c b/match-trees.c index 4704f95c34..5a8a5c39b0 100644 --- a/match-trees.c +++ b/match-trees.c @@ -63,7 +63,7 @@ static void *fill_tree_desc_strict(struct repository *r, enum object_type type; unsigned long size; - buffer = repo_read_object_file(r, hash, &type, &size); + buffer = odb_read_object(r->objects, hash, &type, &size); if (!buffer) die("unable to read tree (%s)", oid_to_hex(hash)); if (type != OBJ_TREE) @@ -199,7 +199,7 @@ static int splice_tree(struct repository *r, if (*subpath) subpath++; - buf = repo_read_object_file(r, oid1, &type, &sz); + buf = odb_read_object(r->objects, oid1, &type, &sz); if (!buf) die("cannot read tree %s", oid_to_hex(oid1)); init_tree_desc(&desc, oid1, buf, sz); diff --git a/merge-blobs.c b/merge-blobs.c index ba8a3fdfd8..6fc2799417 100644 --- a/merge-blobs.c +++ b/merge-blobs.c @@ -12,8 +12,8 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj) unsigned long size; enum object_type type; - buf = repo_read_object_file(the_repository, &obj->object.oid, &type, - &size); + buf = odb_read_object(the_repository->objects, &obj->object.oid, + &type, &size); if (!buf) return -1; if (type != OBJ_BLOB) { @@ -79,8 +79,8 @@ void *merge_blobs(struct index_state *istate, const char *path, return NULL; if (!our) our = their; - return repo_read_object_file(the_repository, &our->object.oid, - &type, size); + return odb_read_object(the_repository->objects, &our->object.oid, + &type, size); } if (fill_mmfile_blob(&f1, our) < 0) diff --git a/merge-ort.c b/merge-ort.c index f29417040c..473ff61e36 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -3629,7 +3629,7 @@ static int read_oid_strbuf(struct merge_options *opt, void *buf; enum object_type type; unsigned long size; - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf) { path_msg(opt, ERROR_OBJECT_READ_FAILED, 0, path, NULL, NULL, NULL, diff --git a/notes-cache.c b/notes-cache.c index 344f67762b..dd56feed6e 100644 --- a/notes-cache.c +++ b/notes-cache.c @@ -87,7 +87,7 @@ char *notes_cache_get(struct notes_cache *c, struct object_id *key_oid, value_oid = get_note(&c->tree, key_oid); if (!value_oid) return NULL; - value = repo_read_object_file(the_repository, value_oid, &type, &size); + value = odb_read_object(the_repository->objects, value_oid, &type, &size); *outsize = size; return value; diff --git a/notes-merge.c b/notes-merge.c index de6a52e2e7..586939939f 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -340,7 +340,7 @@ static void write_note_to_worktree(const struct object_id *obj, { enum object_type type; unsigned long size; - void *buf = repo_read_object_file(the_repository, note, &type, &size); + void *buf = odb_read_object(the_repository->objects, note, &type, &size); if (!buf) die("cannot read note %s for object %s", diff --git a/notes.c b/notes.c index fc000e501d..73eb5f00cf 100644 --- a/notes.c +++ b/notes.c @@ -816,15 +816,15 @@ int combine_notes_concatenate(struct object_id *cur_oid, /* read in both note blob objects */ if (!is_null_oid(new_oid)) - new_msg = repo_read_object_file(the_repository, new_oid, - &new_type, &new_len); + new_msg = odb_read_object(the_repository->objects, new_oid, + &new_type, &new_len); if (!new_msg || !new_len || new_type != OBJ_BLOB) { free(new_msg); return 0; } if (!is_null_oid(cur_oid)) - cur_msg = repo_read_object_file(the_repository, cur_oid, - &cur_type, &cur_len); + cur_msg = odb_read_object(the_repository->objects, cur_oid, + &cur_type, &cur_len); if (!cur_msg || !cur_len || cur_type != OBJ_BLOB) { free(cur_msg); free(new_msg); @@ -880,7 +880,7 @@ static int string_list_add_note_lines(struct string_list *list, return 0; /* read_sha1_file NUL-terminates */ - data = repo_read_object_file(the_repository, oid, &t, &len); + data = odb_read_object(the_repository->objects, oid, &t, &len); if (t != OBJ_BLOB || !data || !len) { free(data); return t != OBJ_BLOB || !data; @@ -1290,7 +1290,8 @@ static void format_note(struct notes_tree *t, const struct object_id *object_oid if (!oid) return; - if (!(msg = repo_read_object_file(the_repository, oid, &type, &msglen)) || type != OBJ_BLOB) { + if (!(msg = odb_read_object(the_repository->objects, oid, &type, &msglen)) || + type != OBJ_BLOB) { free(msg); return; } diff --git a/object.c b/object.c index 868d89eed4..c1553ee433 100644 --- a/object.c +++ b/object.c @@ -335,7 +335,7 @@ struct object *parse_object_with_flags(struct repository *r, return &lookup_tree(r, oid)->object; } - buffer = repo_read_object_file(r, oid, &type, &size); + buffer = odb_read_object(r->objects, oid, &type, &size); if (buffer) { if (!skip_hash && check_object_signature(r, repl, buffer, size, type) < 0) { diff --git a/odb.c b/odb.c index 40eacdfe2d..5419d5dff6 100644 --- a/odb.c +++ b/odb.c @@ -30,7 +30,7 @@ KHASH_INIT(odb_path_map, const char * /* key: odb_path */, /* * This is meant to hold a *small* number of objects that you would - * want repo_read_object_file() to be able to return, but yet you do not want + * want odb_read_object() to be able to return, but yet you do not want * to write them into the object store (e.g. a browse-only * application). */ @@ -887,15 +887,10 @@ int pretend_object_file(struct repository *repo, return 0; } -/* - * This function dies on corrupt objects; the callers who want to - * deal with them should arrange to call odb_read_object_info_extended() and give - * error messages themselves. - */ -void *repo_read_object_file(struct repository *r, - const struct object_id *oid, - enum object_type *type, - unsigned long *size) +void *odb_read_object(struct object_database *odb, + const struct object_id *oid, + enum object_type *type, + unsigned long *size) { struct object_info oi = OBJECT_INFO_INIT; unsigned flags = OBJECT_INFO_DIE_IF_CORRUPT | OBJECT_INFO_LOOKUP_REPLACE; @@ -904,7 +899,7 @@ void *repo_read_object_file(struct repository *r, oi.typep = type; oi.sizep = size; oi.contentp = &data; - if (odb_read_object_info_extended(r->objects, oid, &oi, flags)) + if (odb_read_object_info_extended(odb, oid, &oi, flags)) return NULL; return data; @@ -926,7 +921,7 @@ void *read_object_with_reference(struct repository *r, int ref_length = -1; const char *ref_type = NULL; - buffer = repo_read_object_file(r, &actual_oid, &type, &isize); + buffer = odb_read_object(r->objects, &actual_oid, &type, &isize); if (!buffer) return NULL; if (type == required_type) { diff --git a/odb.h b/odb.h index b37a9c5d20..a4a5154fd0 100644 --- a/odb.h +++ b/odb.h @@ -140,7 +140,7 @@ struct object_database { /* * This is meant to hold a *small* number of objects that you would - * want repo_read_object_file() to be able to return, but yet you do not want + * want odb_read_object() to be able to return, but yet you do not want * to write them into the object store (e.g. a browse-only * application). */ @@ -260,10 +260,19 @@ void odb_add_to_alternates_file(struct object_database *odb, void odb_add_to_alternates_memory(struct object_database *odb, const char *dir); -void *repo_read_object_file(struct repository *r, - const struct object_id *oid, - enum object_type *type, - unsigned long *size); +/* + * Read an object from the database. Returns the object data and assigns object + * type and size to the `type` and `size` pointers, if these pointers are + * non-NULL. Returns a `NULL` pointer in case the object does not exist. + * + * This function dies on corrupt objects; the callers who want to deal with + * them should arrange to call odb_read_object_info_extended() and give error + * messages themselves. + */ +void *odb_read_object(struct object_database *odb, + const struct object_id *oid, + enum object_type *type, + unsigned long *size); /* * Add an object file to the in-memory object store, without writing it @@ -371,7 +380,7 @@ void odb_assert_oid_type(struct object_database *odb, /* * Enabling the object read lock allows multiple threads to safely call the - * following functions in parallel: repo_read_object_file(), + * following functions in parallel: odb_read_object(), * read_object_with_reference(), odb_read_object_info() and odb(). * * obj_read_lock() and obj_read_unlock() may also be used to protect other @@ -446,4 +455,12 @@ static inline int oid_object_info(struct repository *r, return odb_read_object_info(r->objects, oid, sizep); } +static inline void *repo_read_object_file(struct repository *r, + const struct object_id *oid, + enum object_type *type, + unsigned long *size) +{ + return odb_read_object(r->objects, oid, type, size); +} + #endif /* ODB_H */ diff --git a/read-cache.c b/read-cache.c index 7d5bccf95d..531d87e790 100644 --- a/read-cache.c +++ b/read-cache.c @@ -254,7 +254,7 @@ static int ce_compare_link(const struct cache_entry *ce, size_t expected_size) if (strbuf_readlink(&sb, ce->name, expected_size)) return -1; - buffer = repo_read_object_file(the_repository, &ce->oid, &type, &size); + buffer = odb_read_object(the_repository->objects, &ce->oid, &type, &size); if (buffer) { if (size == sb.len) match = memcmp(buffer, sb.buf, size); @@ -3485,8 +3485,8 @@ void *read_blob_data_from_index(struct index_state *istate, } if (pos < 0) return NULL; - data = repo_read_object_file(the_repository, &istate->cache[pos]->oid, - &type, &sz); + data = odb_read_object(the_repository->objects, &istate->cache[pos]->oid, + &type, &sz); if (!data || type != OBJ_BLOB) { free(data); return NULL; diff --git a/reflog.c b/reflog.c index 4f8a3b717c..747b82eada 100644 --- a/reflog.c +++ b/reflog.c @@ -140,8 +140,8 @@ static int tree_is_complete(const struct object_id *oid) if (!tree->buffer) { enum object_type type; unsigned long size; - void *data = repo_read_object_file(the_repository, oid, &type, - &size); + void *data = odb_read_object(the_repository->objects, oid, + &type, &size); if (!data) { tree->object.flags |= INCOMPLETE; return 0; diff --git a/rerere.c b/rerere.c index 951e4bf8b4..8bb97c9822 100644 --- a/rerere.c +++ b/rerere.c @@ -1000,9 +1000,8 @@ static int handle_cache(struct index_state *istate, break; i = ce_stage(ce) - 1; if (!mmfile[i].ptr) { - mmfile[i].ptr = repo_read_object_file(the_repository, - &ce->oid, &type, - &size); + mmfile[i].ptr = odb_read_object(the_repository->objects, + &ce->oid, &type, &size); if (!mmfile[i].ptr) die(_("unable to read %s"), oid_to_hex(&ce->oid)); diff --git a/submodule-config.c b/submodule-config.c index a9f7210788..ea3a087a8b 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -743,8 +743,8 @@ static const struct submodule *config_from(struct submodule_cache *cache, if (submodule) goto out; - config = repo_read_object_file(the_repository, &oid, &type, - &config_size); + config = odb_read_object(the_repository->objects, &oid, + &type, &config_size); if (!config || type != OBJ_BLOB) goto out; diff --git a/tag.c b/tag.c index 144048fd5e..1d52686ee1 100644 --- a/tag.c +++ b/tag.c @@ -60,7 +60,7 @@ int gpg_verify_tag(const struct object_id *oid, const char *name_to_report, repo_find_unique_abbrev(the_repository, oid, DEFAULT_ABBREV), type_name(type)); - buf = repo_read_object_file(the_repository, oid, &type, &size); + buf = odb_read_object(the_repository->objects, oid, &type, &size); if (!buf) return error("%s: unable to read file.", name_to_report ? @@ -222,8 +222,8 @@ int parse_tag(struct tag *item) if (item->object.parsed) return 0; - data = repo_read_object_file(the_repository, &item->object.oid, &type, - &size); + data = odb_read_object(the_repository->objects, &item->object.oid, + &type, &size); if (!data) return error("Could not read %s", oid_to_hex(&item->object.oid)); diff --git a/tree-walk.c b/tree-walk.c index 34b0fff487..766af99f46 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -795,9 +795,9 @@ enum get_oid_result get_tree_entry_follow_symlinks(struct repository *r, */ retval = DANGLING_SYMLINK; - contents = repo_read_object_file(r, - ¤t_tree_oid, &type, - &link_len); + contents = odb_read_object(r->objects, + ¤t_tree_oid, &type, + &link_len); if (!contents) goto done; diff --git a/tree.c b/tree.c index 341b7c2ff3..1ef743d90f 100644 --- a/tree.c +++ b/tree.c @@ -193,8 +193,8 @@ int parse_tree_gently(struct tree *item, int quiet_on_missing) if (item->object.parsed) return 0; - buffer = repo_read_object_file(the_repository, &item->object.oid, - &type, &size); + buffer = odb_read_object(the_repository->objects, &item->object.oid, + &type, &size); if (!buffer) return quiet_on_missing ? -1 : error("Could not read %s", diff --git a/xdiff-interface.c b/xdiff-interface.c index 01e6e378ea..0e5d38c960 100644 --- a/xdiff-interface.c +++ b/xdiff-interface.c @@ -187,7 +187,7 @@ void read_mmblob(mmfile_t *ptr, const struct object_id *oid) return; } - ptr->ptr = repo_read_object_file(the_repository, oid, &type, &size); + ptr->ptr = odb_read_object(the_repository->objects, oid, &type, &size); if (!ptr->ptr || type != OBJ_BLOB) die("unable to read blob object %s", oid_to_hex(oid)); ptr->size = size; -- cgit v1.2.3 From fcf8e3e111ec46705f91151baee40f2c0a3637da Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 1 Jul 2025 14:22:27 +0200 Subject: odb: rename `has_object()` Rename `has_object()` to `odb_has_object()` to match other functions related to the object database and our modern coding guidelines. Introduce a compatibility wrapper so that any in-flight topics will continue to compile. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- apply.c | 2 +- builtin/backfill.c | 4 ++-- builtin/cat-file.c | 4 ++-- builtin/clone.c | 2 +- builtin/fetch.c | 17 +++++++++-------- builtin/fsck.c | 2 +- builtin/index-pack.c | 4 ++-- builtin/pack-objects.c | 4 ++-- builtin/receive-pack.c | 4 ++-- builtin/remote.c | 4 ++-- builtin/show-ref.c | 4 ++-- builtin/unpack-objects.c | 4 ++-- bulk-checkin.c | 4 ++-- cache-tree.c | 15 ++++++++------- commit-graph.c | 2 +- commit.c | 2 +- fetch-pack.c | 8 ++++---- http-push.c | 14 ++++++++------ http-walker.c | 8 ++++---- list-objects.c | 4 ++-- notes.c | 4 ++-- odb.c | 6 +++--- odb.h | 12 ++++++++++-- reflog.c | 2 +- refs.c | 3 ++- remote.c | 2 +- send-pack.c | 2 +- shallow.c | 12 ++++++------ upload-pack.c | 2 +- walker.c | 4 ++-- 30 files changed, 87 insertions(+), 74 deletions(-) (limited to 'commit.c') diff --git a/apply.c b/apply.c index a34ced0462..a6836692d0 100644 --- a/apply.c +++ b/apply.c @@ -3204,7 +3204,7 @@ static int apply_binary(struct apply_state *state, return 0; /* deletion patch */ } - if (has_object(the_repository, &oid, 0)) { + if (odb_has_object(the_repository->objects, &oid, 0)) { /* We already have the postimage */ enum object_type type; unsigned long size; diff --git a/builtin/backfill.c b/builtin/backfill.c index 0b49baa39f..80056abe47 100644 --- a/builtin/backfill.c +++ b/builtin/backfill.c @@ -67,8 +67,8 @@ static int fill_missing_blobs(const char *path UNUSED, return 0; for (size_t i = 0; i < list->nr; i++) { - if (!has_object(ctx->repo, &list->oid[i], - OBJECT_INFO_FOR_PREFETCH)) + if (!odb_has_object(ctx->repo->objects, &list->oid[i], + OBJECT_INFO_FOR_PREFETCH)) oid_array_append(&ctx->current_batch, &list->oid[i]); } diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 90a3e159d1..01672ec74b 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -160,8 +160,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) goto cleanup; case 'e': - ret = !has_object(the_repository, &oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR); + ret = !odb_has_object(the_repository->objects, &oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR); goto cleanup; case 'w': diff --git a/builtin/clone.c b/builtin/clone.c index 3aabdf6570..6d08abed37 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -506,7 +506,7 @@ static void write_followtags(const struct ref *refs, const char *msg) continue; if (ends_with(ref->name, "^{}")) continue; - if (!has_object(the_repository, &ref->old_oid, 0)) + if (!odb_has_object(the_repository->objects, &ref->old_oid, 0)) continue; refs_update_ref(get_main_ref_store(the_repository), msg, ref->name, &ref->old_oid, NULL, 0, diff --git a/builtin/fetch.c b/builtin/fetch.c index b842bc9c51..65ea6c8436 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -366,9 +366,9 @@ static void find_non_local_tags(const struct ref *refs, */ if (ends_with(ref->name, "^{}")) { if (item && - !has_object(the_repository, &ref->old_oid, 0) && + !odb_has_object(the_repository->objects, &ref->old_oid, 0) && !oidset_contains(&fetch_oids, &ref->old_oid) && - !has_object(the_repository, &item->oid, 0) && + !odb_has_object(the_repository->objects, &item->oid, 0) && !oidset_contains(&fetch_oids, &item->oid)) clear_item(item); item = NULL; @@ -382,7 +382,7 @@ static void find_non_local_tags(const struct ref *refs, * fetch. */ if (item && - !has_object(the_repository, &item->oid, 0) && + !odb_has_object(the_repository->objects, &item->oid, 0) && !oidset_contains(&fetch_oids, &item->oid)) clear_item(item); @@ -403,7 +403,7 @@ static void find_non_local_tags(const struct ref *refs, * checked to see if it needs fetching. */ if (item && - !has_object(the_repository, &item->oid, 0) && + !odb_has_object(the_repository->objects, &item->oid, 0) && !oidset_contains(&fetch_oids, &item->oid)) clear_item(item); @@ -910,8 +910,8 @@ static int update_local_ref(struct ref *ref, struct commit *current = NULL, *updated; int fast_forward = 0; - if (!has_object(the_repository, &ref->new_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (!odb_has_object(the_repository->objects, &ref->new_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) die(_("object %s not found"), oid_to_hex(&ref->new_oid)); if (oideq(&ref->old_oid, &ref->new_oid)) { @@ -1330,7 +1330,8 @@ static int check_exist_and_connected(struct ref *ref_map) * we need all direct targets to exist. */ for (r = rm; r; r = r->next) { - if (!has_object(the_repository, &r->old_oid, HAS_OBJECT_RECHECK_PACKED)) + if (!odb_has_object(the_repository->objects, &r->old_oid, + HAS_OBJECT_RECHECK_PACKED)) return -1; } @@ -1485,7 +1486,7 @@ static void add_negotiation_tips(struct git_transport_options *smart_options) struct object_id oid; if (repo_get_oid(the_repository, s, &oid)) die(_("%s is not a valid object"), s); - if (!has_object(the_repository, &oid, 0)) + if (!odb_has_object(the_repository->objects, &oid, 0)) die(_("the object %s does not exist"), s); oid_array_append(oids, &oid); continue; diff --git a/builtin/fsck.c b/builtin/fsck.c index 6e3465b026..0084cf7400 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -161,7 +161,7 @@ static int mark_object(struct object *obj, enum object_type type, return 0; if (!(obj->flags & HAS_OBJ)) { - if (parent && !has_object(the_repository, &obj->oid, 1)) { + if (parent && !odb_has_object(the_repository->objects, &obj->oid, 1)) { printf_ln(_("broken link from %7s %s\n" " to %7s %s"), printable_type(&parent->oid, parent->type), diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 180d261f6c..19c67a8534 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -893,8 +893,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, if (startup_info->have_repository) { read_lock(); - collision_test_needed = has_object(the_repository, oid, - HAS_OBJECT_FETCH_PROMISOR); + collision_test_needed = odb_has_object(the_repository->objects, oid, + HAS_OBJECT_FETCH_PROMISOR); read_unlock(); } diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 580a5c1996..06bdeb4223 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3968,7 +3968,7 @@ static void show_object__ma_allow_any(struct object *obj, const char *name, void * Quietly ignore ALL missing objects. This avoids problems with * staging them now and getting an odd error later. */ - if (!has_object(the_repository, &obj->oid, 0)) + if (!odb_has_object(the_repository->objects, &obj->oid, 0)) return; show_object(obj, name, data); @@ -3982,7 +3982,7 @@ static void show_object__ma_allow_promisor(struct object *obj, const char *name, * Quietly ignore EXPECTED missing objects. This avoids problems with * staging them now and getting an odd error later. */ - if (!has_object(the_repository, &obj->oid, 0) && + if (!odb_has_object(the_repository->objects, &obj->oid, 0) && is_promisor_object(to_pack.repo, &obj->oid)) return; diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 7ea273d93e..26e77d7072 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -1509,8 +1509,8 @@ static const char *update(struct command *cmd, struct shallow_info *si) } if (!is_null_oid(new_oid) && - !has_object(the_repository, new_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + !odb_has_object(the_repository->objects, new_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { error("unpack should have generated %s, " "but I can't find it!", oid_to_hex(new_oid)); ret = "bad pack"; diff --git a/builtin/remote.c b/builtin/remote.c index ac5b8d2a1a..7cbda285eb 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -454,8 +454,8 @@ static int get_push_ref_states(const struct ref *remote_refs, info->status = PUSH_STATUS_UPTODATE; else if (is_null_oid(&ref->old_oid)) info->status = PUSH_STATUS_CREATE; - else if (has_object(the_repository, &ref->old_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && + else if (odb_has_object(the_repository->objects, &ref->old_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && ref_newer(&ref->new_oid, &ref->old_oid)) info->status = PUSH_STATUS_FASTFORWARD; else diff --git a/builtin/show-ref.c b/builtin/show-ref.c index 90ec1de78f..117709cb07 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -35,8 +35,8 @@ static void show_one(const struct show_one_options *opts, const char *hex; struct object_id peeled; - if (!has_object(the_repository, oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (!odb_has_object(the_repository->objects, oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) die("git show-ref: bad ref %s (%s)", refname, oid_to_hex(oid)); diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 4bc6575a57..a69d59eb50 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -449,8 +449,8 @@ static void unpack_delta_entry(enum object_type type, unsigned long delta_size, delta_data = get_data(delta_size); if (!delta_data) return; - if (has_object(the_repository, &base_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, &base_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) ; /* Ok we have this one */ else if (resolve_against_held(nr, &base_oid, delta_data, delta_size)) diff --git a/bulk-checkin.c b/bulk-checkin.c index 55406a539e..16df86c0ba 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -130,8 +130,8 @@ static void flush_batch_fsync(void) static int already_written(struct bulk_checkin_packfile *state, struct object_id *oid) { /* The object may already exist in the repository */ - if (has_object(the_repository, oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return 1; /* Might want to keep the list sorted */ diff --git a/cache-tree.c b/cache-tree.c index 9786b32b3a..a4bc14ad15 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -239,8 +239,8 @@ int cache_tree_fully_valid(struct cache_tree *it) if (!it) return 0; if (it->entry_count < 0 || - has_object(the_repository, &it->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + odb_has_object(the_repository->objects, &it->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return 0; for (i = 0; i < it->subtree_nr; i++) { if (!cache_tree_fully_valid(it->down[i]->cache_tree)) @@ -292,8 +292,8 @@ static int update_one(struct cache_tree *it, } if (0 <= it->entry_count && - has_object(the_repository, &it->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + odb_has_object(the_repository->objects, &it->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return it->entry_count; /* @@ -399,8 +399,9 @@ static int update_one(struct cache_tree *it, ce_missing_ok = mode == S_IFGITLINK || missing_ok || !must_check_existence(ce); if (is_null_oid(oid) || - (!ce_missing_ok && !has_object(the_repository, oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))) { + (!ce_missing_ok && + !odb_has_object(the_repository->objects, oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))) { strbuf_release(&buffer); if (expected_missing) return -1; @@ -448,7 +449,7 @@ static int update_one(struct cache_tree *it, struct object_id oid; hash_object_file(the_hash_algo, buffer.buf, buffer.len, OBJ_TREE, &oid); - if (has_object(the_repository, &oid, HAS_OBJECT_RECHECK_PACKED)) + if (odb_has_object(the_repository->objects, &oid, HAS_OBJECT_RECHECK_PACKED)) oidcpy(&it->oid, &oid); else to_invalidate = 1; diff --git a/commit-graph.c b/commit-graph.c index 5f482d3377..bd7b6f5338 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1040,7 +1040,7 @@ struct commit *lookup_commit_in_graph(struct repository *repo, const struct obje return NULL; if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos)) return NULL; - if (commit_graph_paranoia && !has_object(repo, id, 0)) + if (commit_graph_paranoia && !odb_has_object(repo->objects, id, 0)) return NULL; commit = lookup_commit(repo, id); diff --git a/commit.c b/commit.c index 28ee6b73ae..15115125c3 100644 --- a/commit.c +++ b/commit.c @@ -575,7 +575,7 @@ int repo_parse_commit_internal(struct repository *r, if (commit_graph_paranoia == -1) commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 0); - if (commit_graph_paranoia && !has_object(r, &item->object.oid, 0)) { + if (commit_graph_paranoia && !odb_has_object(r->objects, &item->object.oid, 0)) { unparse_commit(r, &item->object.oid); return quiet_on_missing ? -1 : error(_("commit %s exists in commit-graph but not in the object database"), diff --git a/fetch-pack.c b/fetch-pack.c index 0f5de1c94d..5e74235fc0 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -142,7 +142,7 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid, commit = lookup_commit_in_graph(the_repository, oid); if (commit) { if (mark_tags_complete_and_check_obj_db) { - if (!has_object(the_repository, oid, 0)) + if (!odb_has_object(the_repository->objects, oid, 0)) die_in_commit_graph_only(oid); } return commit; @@ -770,7 +770,7 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator, if (!commit) { struct object *o; - if (!has_object(the_repository, &ref->old_oid, 0)) + if (!odb_has_object(the_repository->objects, &ref->old_oid, 0)) continue; o = parse_object(the_repository, &ref->old_oid); if (!o || o->type != OBJ_COMMIT) @@ -1984,8 +1984,8 @@ static void update_shallow(struct fetch_pack_args *args, struct oid_array extra = OID_ARRAY_INIT; struct object_id *oid = si->shallow->oid; for (i = 0; i < si->shallow->nr; i++) - if (has_object(the_repository, &oid[i], - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, &oid[i], + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) oid_array_append(&extra, &oid[i]); if (extra.nr) { setup_alternate_shallow(&shallow_lock, diff --git a/http-push.c b/http-push.c index 9481825abf..beb41732fb 100644 --- a/http-push.c +++ b/http-push.c @@ -1447,8 +1447,8 @@ static void one_remote_ref(const char *refname) * may be required for updating server info later. */ if (repo->can_update_info_refs && - !has_object(the_repository, &ref->old_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + !odb_has_object(the_repository->objects, &ref->old_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { obj = lookup_unknown_object(the_repository, &ref->old_oid); fprintf(stderr, " fetch %s for %s\n", oid_to_hex(&ref->old_oid), refname); @@ -1653,14 +1653,16 @@ static int delete_remote_branch(const char *pattern, int force) return error("Remote HEAD symrefs too deep"); if (is_null_oid(&head_oid)) return error("Unable to resolve remote HEAD"); - if (!has_object(the_repository, &head_oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (!odb_has_object(the_repository->objects, &head_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return error("Remote HEAD resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", oid_to_hex(&head_oid)); /* Remote branch must resolve to a known object */ if (is_null_oid(&remote_ref->old_oid)) return error("Unable to resolve remote branch %s", remote_ref->name); - if (!has_object(the_repository, &remote_ref->old_oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (!odb_has_object(the_repository->objects, &remote_ref->old_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return error("Remote branch %s resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", remote_ref->name, oid_to_hex(&remote_ref->old_oid)); /* Remote branch must be an ancestor of remote HEAD */ @@ -1881,8 +1883,8 @@ int cmd_main(int argc, const char **argv) if (!force_all && !is_null_oid(&ref->old_oid) && !ref->force) { - if (!has_object(the_repository, &ref->old_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) || + if (!odb_has_object(the_repository->objects, &ref->old_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) || !ref_newer(&ref->peer_ref->new_oid, &ref->old_oid)) { /* diff --git a/http-walker.c b/http-walker.c index 05fb9ce714..0f7ae46d7f 100644 --- a/http-walker.c +++ b/http-walker.c @@ -138,8 +138,8 @@ static int fill_active_slot(void *data UNUSED) list_for_each_safe(pos, tmp, head) { obj_req = list_entry(pos, struct object_request, node); if (obj_req->state == WAITING) { - if (has_object(the_repository, &obj_req->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, &obj_req->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) obj_req->state = COMPLETE; else { start_object_request(obj_req); @@ -497,8 +497,8 @@ static int fetch_object(struct walker *walker, const struct object_id *oid) if (!obj_req) return error("Couldn't find request for %s in the queue", hex); - if (has_object(the_repository, &obj_req->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + if (odb_has_object(the_repository->objects, &obj_req->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { if (obj_req->req) abort_http_object_request(&obj_req->req); abort_object_request(obj_req); diff --git a/list-objects.c b/list-objects.c index c50b957858..42c17d9573 100644 --- a/list-objects.c +++ b/list-objects.c @@ -74,8 +74,8 @@ static void process_blob(struct traversal_context *ctx, * of missing objects. */ if (ctx->revs->exclude_promisor_objects && - !has_object(the_repository, &obj->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && + !odb_has_object(the_repository->objects, &obj->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && is_promisor_object(ctx->revs->repo, &obj->oid)) return; diff --git a/notes.c b/notes.c index 73eb5f00cf..97b995f3f2 100644 --- a/notes.c +++ b/notes.c @@ -794,8 +794,8 @@ static int prune_notes_helper(const struct object_id *object_oid, struct note_delete_list **l = (struct note_delete_list **) cb_data; struct note_delete_list *n; - if (has_object(the_repository, object_oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, object_oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return 0; /* nothing to do for this note */ /* failed to find object => prune this note */ diff --git a/odb.c b/odb.c index 5419d5dff6..ecb6711a27 100644 --- a/odb.c +++ b/odb.c @@ -871,7 +871,7 @@ int pretend_object_file(struct repository *repo, char *co_buf; hash_object_file(repo->hash_algo, buf, len, type, oid); - if (has_object(repo, oid, 0) || + if (odb_has_object(repo->objects, oid, 0) || find_cached_object(repo->objects, oid)) return 0; @@ -953,7 +953,7 @@ void *read_object_with_reference(struct repository *r, } } -int has_object(struct repository *r, const struct object_id *oid, +int odb_has_object(struct object_database *odb, const struct object_id *oid, unsigned flags) { unsigned object_info_flags = 0; @@ -965,7 +965,7 @@ int has_object(struct repository *r, const struct object_id *oid, if (!(flags & HAS_OBJECT_FETCH_PROMISOR)) object_info_flags |= OBJECT_INFO_SKIP_FETCH_OBJECT; - return odb_read_object_info_extended(r->objects, oid, NULL, object_info_flags) >= 0; + return odb_read_object_info_extended(odb, oid, NULL, object_info_flags) >= 0; } void odb_assert_oid_type(struct object_database *odb, diff --git a/odb.h b/odb.h index a4a5154fd0..2532c49046 100644 --- a/odb.h +++ b/odb.h @@ -372,8 +372,9 @@ enum { * Returns 1 if the object exists. This function will not lazily fetch objects * in a partial clone by default. */ -int has_object(struct repository *r, const struct object_id *oid, - unsigned flags); +int odb_has_object(struct object_database *odb, + const struct object_id *oid, + unsigned flags); void odb_assert_oid_type(struct object_database *odb, const struct object_id *oid, enum object_type expect); @@ -463,4 +464,11 @@ static inline void *repo_read_object_file(struct repository *r, return odb_read_object(r->objects, oid, type, size); } +static inline int has_object(struct repository *r, + const struct object_id *oid, + unsigned flags) +{ + return odb_has_object(r->objects, oid, flags); +} + #endif /* ODB_H */ diff --git a/reflog.c b/reflog.c index 747b82eada..39c205fd26 100644 --- a/reflog.c +++ b/reflog.c @@ -152,7 +152,7 @@ static int tree_is_complete(const struct object_id *oid) init_tree_desc(&desc, &tree->object.oid, tree->buffer, tree->size); complete = 1; while (tree_entry(&desc, &entry)) { - if (!has_object(the_repository, &entry.oid, + if (!odb_has_object(the_repository->objects, &entry.oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) || (S_ISDIR(entry.mode) && !tree_is_complete(&entry.oid))) { tree->object.flags |= INCOMPLETE; diff --git a/refs.c b/refs.c index 0ff0e582a6..26e5c2a7d9 100644 --- a/refs.c +++ b/refs.c @@ -376,7 +376,8 @@ int ref_resolves_to_object(const char *refname, { if (flags & REF_ISBROKEN) return 0; - if (!has_object(repo, oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + if (!odb_has_object(repo->objects, oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { error(_("%s does not point to a valid object!"), refname); return 0; } diff --git a/remote.c b/remote.c index 72c36239d3..5edf2a9f4b 100644 --- a/remote.c +++ b/remote.c @@ -1703,7 +1703,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, if (!reject_reason && !ref->deletion && !is_null_oid(&ref->old_oid)) { if (starts_with(ref->name, "refs/tags/")) reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS; - else if (!has_object(the_repository, &ref->old_oid, HAS_OBJECT_RECHECK_PACKED)) + else if (!odb_has_object(the_repository->objects, &ref->old_oid, HAS_OBJECT_RECHECK_PACKED)) reject_reason = REF_STATUS_REJECT_FETCH_FIRST; else if (!lookup_commit_reference_gently(the_repository, &ref->old_oid, 1) || !lookup_commit_reference_gently(the_repository, &ref->new_oid, 1)) diff --git a/send-pack.c b/send-pack.c index abca2dd38a..d029f74823 100644 --- a/send-pack.c +++ b/send-pack.c @@ -45,7 +45,7 @@ int option_parse_push_signed(const struct option *opt, static void feed_object(struct repository *r, const struct object_id *oid, FILE *fh, int negative) { - if (negative && !has_object(r, oid, 0)) + if (negative && !odb_has_object(r->objects, oid, 0)) return; if (negative) diff --git a/shallow.c b/shallow.c index d379756e39..ef3adb635f 100644 --- a/shallow.c +++ b/shallow.c @@ -310,8 +310,8 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data) if (graft->nr_parent != -1) return 0; if (data->flags & QUICK) { - if (!has_object(the_repository, &graft->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (!odb_has_object(the_repository->objects, &graft->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) return 0; } else if (data->flags & SEEN_ONLY) { struct commit *c = lookup_commit(the_repository, &graft->oid); @@ -477,8 +477,8 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa) ALLOC_ARRAY(info->ours, sa->nr); ALLOC_ARRAY(info->theirs, sa->nr); for (size_t i = 0; i < sa->nr; i++) { - if (has_object(the_repository, sa->oid + i, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + if (odb_has_object(the_repository->objects, sa->oid + i, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { struct commit_graft *graft; graft = lookup_commit_graft(the_repository, &sa->oid[i]); @@ -515,8 +515,8 @@ void remove_nonexistent_theirs_shallow(struct shallow_info *info) for (i = dst = 0; i < info->nr_theirs; i++) { if (i != dst) info->theirs[dst] = info->theirs[i]; - if (has_object(the_repository, oid + info->theirs[i], - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) + if (odb_has_object(the_repository->objects, oid + info->theirs[i], + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) dst++; } info->nr_theirs = dst; diff --git a/upload-pack.c b/upload-pack.c index e994d6a901..4f26f6afc7 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -509,7 +509,7 @@ static int got_oid(struct upload_pack_data *data, { if (get_oid_hex(hex, oid)) die("git upload-pack: expected SHA1 object, got '%s'", hex); - if (!has_object(the_repository, oid, 0)) + if (!odb_has_object(the_repository->objects, oid, 0)) return -1; return do_got_oid(data, oid); } diff --git a/walker.c b/walker.c index a8abe8a2e7..d131af04c7 100644 --- a/walker.c +++ b/walker.c @@ -150,8 +150,8 @@ static int process(struct walker *walker, struct object *obj) return 0; obj->flags |= SEEN; - if (has_object(the_repository, &obj->oid, - HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { + if (odb_has_object(the_repository->objects, &obj->oid, + HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { /* We already have it, so we should scan it now. */ obj->flags |= TO_SCAN; } -- cgit v1.2.3