object-file: move loose object map into loose source

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>

Patrick Steinhardt committed Nov 3, 2025 at 08:42 UTC 376016ec71c3a6c883f2ca77a3f1c0245fd60dc2
5 files changed +9 -9
loose.c
+5 -5
@@ -49,7 +49,7 @@ static int insert_loose_map(struct odb_source *source,
49 const struct object_id *oid,
50 const struct object_id *compat_oid)
51 {
52 - struct loose_object_map *map = source->loose_map;
52 + struct loose_object_map *map = source->loose->map;
53 int inserted = 0;
54
55 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
65 struct strbuf buf = STRBUF_INIT, path = STRBUF_INIT;
66 FILE *fp;
67
68 - if (!source->loose_map)
69 - loose_object_map_init(&source->loose_map);
68 + if (!source->loose->map)
69 + loose_object_map_init(&source->loose->map);
70 if (!source->loose->cache) {
71 ALLOC_ARRAY(source->loose->cache, 1);
72 oidtree_init(source->loose->cache);
@@ -125,7 +125,7 @@ int repo_read_loose_object_map(struct repository *repo)
125
126 int repo_write_loose_object_map(struct repository *repo)
127 {
128 - kh_oid_map_t *map = repo->objects->sources->loose_map->to_compat;
128 + kh_oid_map_t *map = repo->objects->sources->loose->map->to_compat;
129 struct lock_file lock;
130 int fd;
131 khiter_t iter;
@@ -231,7 +231,7 @@ int repo_loose_object_map_oid(struct repository *repo,
231 khiter_t pos;
232
233 for (source = repo->objects->sources; source; source = source->next) {
234 - struct loose_object_map *loose_map = source->loose_map;
234 + struct loose_object_map *loose_map = source->loose->map;
235 if (!loose_map)
236 continue;
237 map = (to == repo->compat_hash_algo) ?
object-file.c
+1
@@ -2014,5 +2014,6 @@ void odb_source_loose_free(struct odb_source_loose *loose)
2014 if (!loose)
2015 return;
2016 odb_source_loose_clear_cache(loose);
2017 + loose_object_map_clear(&loose->map);
2018 free(loose);
2019 }
object-file.h
+3
@@ -32,6 +32,9 @@ struct odb_source_loose {
32 */
33 uint32_t subdir_seen[8]; /* 256 bits */
34 struct oidtree *cache;
35 +
36 + /* Map between object IDs for loose objects. */
37 + struct loose_object_map *map;
38 };
39
40 struct odb_source_loose *odb_source_loose_new(struct odb_source *source);
odb.c
-1
@@ -370,7 +370,6 @@ static void odb_source_free(struct odb_source *source)
370 {
371 free(source->path);
372 odb_source_loose_free(source->loose);
373 - loose_object_map_clear(&source->loose_map);
373 free(source);
374 }
375
odb.h
-3
@@ -51,9 +51,6 @@ struct odb_source {
51 /* Private state for loose objects. */
52 struct odb_source_loose *loose;
53
54 - /* Map between object IDs for loose objects. */
55 - struct loose_object_map *loose_map;
56 -
54 /*
55 * private data
56 *