]> Kevux Git Server - rit/commitdiff
object-file: move loose object map into loose source
authorPatrick Steinhardt <ps@pks.im>
Mon, 3 Nov 2025 07:42:03 +0000 (08:42 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 3 Nov 2025 20:18:47 +0000 (12:18 -0800)
The loose object map is used to map from the repository's canonical
object hash to the compatibility hash. As the name indicates, this map
is only used for loose objects, and as such it is tied to a specific
loose object source.

Same as with preceding commits, move this map into the loose object
source accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
loose.c
object-file.c
object-file.h
odb.c
odb.h

diff --git a/loose.c b/loose.c
index 8cc7573..56cf64b 100644 (file)
--- a/loose.c
+++ b/loose.c
@@ -49,7 +49,7 @@ static int insert_loose_map(struct odb_source *source,
                            const struct object_id *oid,
                            const struct object_id *compat_oid)
 {
-       struct loose_object_map *map = source->loose_map;
+       struct loose_object_map *map = source->loose->map;
        int inserted = 0;
 
        inserted |= insert_oid_pair(map->to_compat, oid, compat_oid);
@@ -65,8 +65,8 @@ static int load_one_loose_object_map(struct repository *repo, struct odb_source
        struct strbuf buf = STRBUF_INIT, path = STRBUF_INIT;
        FILE *fp;
 
-       if (!source->loose_map)
-               loose_object_map_init(&source->loose_map);
+       if (!source->loose->map)
+               loose_object_map_init(&source->loose->map);
        if (!source->loose->cache) {
                ALLOC_ARRAY(source->loose->cache, 1);
                oidtree_init(source->loose->cache);
@@ -125,7 +125,7 @@ int repo_read_loose_object_map(struct repository *repo)
 
 int repo_write_loose_object_map(struct repository *repo)
 {
-       kh_oid_map_t *map = repo->objects->sources->loose_map->to_compat;
+       kh_oid_map_t *map = repo->objects->sources->loose->map->to_compat;
        struct lock_file lock;
        int fd;
        khiter_t iter;
@@ -231,7 +231,7 @@ int repo_loose_object_map_oid(struct repository *repo,
        khiter_t pos;
 
        for (source = repo->objects->sources; source; source = source->next) {
-               struct loose_object_map *loose_map = source->loose_map;
+               struct loose_object_map *loose_map = source->loose->map;
                if (!loose_map)
                        continue;
                map = (to == repo->compat_hash_algo) ?
index 20daa62..ccc6771 100644 (file)
@@ -2014,5 +2014,6 @@ void odb_source_loose_free(struct odb_source_loose *loose)
        if (!loose)
                return;
        odb_source_loose_clear_cache(loose);
+       loose_object_map_clear(&loose->map);
        free(loose);
 }
index bec855e..f8a96a4 100644 (file)
@@ -32,6 +32,9 @@ struct odb_source_loose {
         */
        uint32_t subdir_seen[8]; /* 256 bits */
        struct oidtree *cache;
+
+       /* Map between object IDs for loose objects. */
+       struct loose_object_map *map;
 };
 
 struct odb_source_loose *odb_source_loose_new(struct odb_source *source);
diff --git a/odb.c b/odb.c
index b3e8d4a..d1df960 100644 (file)
--- a/odb.c
+++ b/odb.c
@@ -370,7 +370,6 @@ static void odb_source_free(struct odb_source *source)
 {
        free(source->path);
        odb_source_loose_free(source->loose);
-       loose_object_map_clear(&source->loose_map);
        free(source);
 }
 
diff --git a/odb.h b/odb.h
index 7710439..f9a3137 100644 (file)
--- a/odb.h
+++ b/odb.h
@@ -51,9 +51,6 @@ struct odb_source {
        /* Private state for loose objects. */
        struct odb_source_loose *loose;
 
-       /* Map between object IDs for loose objects. */
-       struct loose_object_map *loose_map;
-
        /*
         * private data
         *