From: Christian Couder Date: Fri, 23 Oct 2026 07:25:46 GMT Subject: [PATCH v2 01/13] loose: allow looking up in object map with source Message-ID: <20261023072559.3204273-2-christian.couder@gmail.com> In-Reply-To: <20261023072559.3204273-1-christian.couder@gmail.com> From: "brian m. carlson" In preparation for wiring up object mapping into the ODB abstraction, add a function which can map object IDs based on a struct odb_source_loose and use it in the existing function. This preserves the same behavior, but allows us to make use of it elsewhere in the future. Signed-off-by: brian m. carlson Signed-off-by: Christian Couder --- loose.c | 41 +++++++++++++++++++++++++++++------------ loose.h | 5 +++++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/loose.c b/loose.c index d6a2bb5ba3..fe8f540979 100644 --- a/loose.c +++ b/loose.c @@ -225,27 +225,44 @@ int repo_add_loose_object_map(struct odb_source_loose *loose, return 0; } +int source_loose_object_map_oid(struct odb_source_loose *loose, + const struct object_id *src, + const struct git_hash_algo *to, + struct object_id *dest) +{ + kh_oid_map_t *map; + khiter_t pos; + struct loose_object_map *loose_map = loose->map; + struct repository *repo = loose->base.odb->repo; + + if (!loose_map) + return -1; + map = (to == repo->compat_hash_algo) ? + loose_map->to_compat : + loose_map->to_storage; + pos = kh_get_oid_map(map, *src); + if (pos < kh_end(map)) { + oidcpy(dest, kh_value(map, pos)); + return 0; + } + return -1; +} + int repo_loose_object_map_oid(struct repository *repo, const struct object_id *src, const struct git_hash_algo *to, struct object_id *dest) { struct odb_source_files *files = odb_source_files_downcast(repo->objects->source); - kh_oid_map_t *map; - khiter_t pos; for (struct odb_files_dir *dir = files->dirs; dir; dir = dir->next) { - struct loose_object_map *loose_map = dir->loose->map; - if (!loose_map) + int ret; + + if (!dir->loose) continue; - map = (to == repo->compat_hash_algo) ? - loose_map->to_compat : - loose_map->to_storage; - pos = kh_get_oid_map(map, *src); - if (pos < kh_end(map)) { - oidcpy(dest, kh_value(map, pos)); - return 0; - } + ret = source_loose_object_map_oid(dir->loose, src, to, dest); + if (ret != -1) + return ret; } return -1; } diff --git a/loose.h b/loose.h index ed663ac550..f3b1e47363 100644 --- a/loose.h +++ b/loose.h @@ -24,4 +24,9 @@ int repo_add_loose_object_map(struct odb_source_loose *loose, int repo_read_loose_object_map(struct repository *repo); int repo_write_loose_object_map(struct repository *repo); +int source_loose_object_map_oid(struct odb_source_loose *loose, + const struct object_id *src, + const struct git_hash_algo *to, + struct object_id *dest); + #endif -- 2.56.0.215.g47fdf2208c