aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2025-05-19 16:02:47 -0700
committerJunio C Hamano <gitster@pobox.com>2025-05-19 16:02:47 -0700
commita9dcacbf2a74537916f61dd8c5f2dd2c1b4eb58a (patch)
tree1e9684531b97a24571f1f977137fe42b5bab69f7
parentMerge branch 'rc/t1001-test-path-is-file' (diff)
parentraw_object_store: drop extra pointer to replace_map (diff)
downloadgit-a9dcacbf2a74537916f61dd8c5f2dd2c1b4eb58a.tar.gz
git-a9dcacbf2a74537916f61dd8c5f2dd2c1b4eb58a.zip
Merge branch 'jk/oidmap-cleanup'
Code cleanup. * jk/oidmap-cleanup: raw_object_store: drop extra pointer to replace_map oidmap: add size function oidmap: rename oidmap_free() to oidmap_clear()
-rw-r--r--builtin/rev-list.c2
-rw-r--r--commit-graph.c2
-rw-r--r--list-objects-filter.c2
-rw-r--r--object-store.c3
-rw-r--r--object-store.h3
-rw-r--r--oidmap.c2
-rw-r--r--oidmap.h9
-rw-r--r--replace-object.c8
-rw-r--r--replace-object.h2
-rw-r--r--sequencer.c4
-rw-r--r--t/unit-tests/u-oidmap.c2
11 files changed, 21 insertions, 18 deletions
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index c4cd4ed5c8..0984b607bf 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -924,7 +924,7 @@ int cmd_rev_list(int argc,
free((void *)entry->path);
}
- oidmap_free(&missing_objects, true);
+ oidmap_clear(&missing_objects, true);
}
stop_progress(&progress);
diff --git a/commit-graph.c b/commit-graph.c
index 6394752b0b..4a6e34f8a0 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -222,7 +222,7 @@ static int commit_graph_compatible(struct repository *r)
if (replace_refs_enabled(r)) {
prepare_replace_object(r);
- if (hashmap_get_size(&r->objects->replace_map->map))
+ if (oidmap_get_size(&r->objects->replace_map))
return 0;
}
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 7765761b3c..78b397bc19 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -244,7 +244,7 @@ static void filter_trees_free(void *filter_data) {
struct filter_trees_depth_data *d = filter_data;
if (!d)
return;
- oidmap_free(&d->seen_at_depth, 1);
+ oidmap_clear(&d->seen_at_depth, 1);
free(d);
}
diff --git a/object-store.c b/object-store.c
index 2f51d0e3b0..517f1fd145 100644
--- a/object-store.c
+++ b/object-store.c
@@ -987,8 +987,7 @@ void raw_object_store_clear(struct raw_object_store *o)
{
FREE_AND_NULL(o->alternate_db);
- oidmap_free(o->replace_map, 1);
- FREE_AND_NULL(o->replace_map);
+ oidmap_clear(&o->replace_map, 1);
pthread_mutex_destroy(&o->replace_mutex);
free_commit_graph(o->commit_graph);
diff --git a/object-store.h b/object-store.h
index c2fe5a1960..141b801113 100644
--- a/object-store.h
+++ b/object-store.h
@@ -5,6 +5,7 @@
#include "object.h"
#include "list.h"
#include "oidset.h"
+#include "oidmap.h"
#include "thread-utils.h"
struct oidmap;
@@ -109,7 +110,7 @@ struct raw_object_store {
* Objects that should be substituted by other objects
* (see git-replace(1)).
*/
- struct oidmap *replace_map;
+ struct oidmap replace_map;
unsigned replace_map_initialized : 1;
pthread_mutex_t replace_mutex; /* protect object replace functions */
diff --git a/oidmap.c b/oidmap.c
index 8b1bc4dec9..508d6c7dec 100644
--- a/oidmap.c
+++ b/oidmap.c
@@ -22,7 +22,7 @@ void oidmap_init(struct oidmap *map, size_t initial_size)
hashmap_init(&map->map, oidmap_neq, NULL, initial_size);
}
-void oidmap_free(struct oidmap *map, int free_entries)
+void oidmap_clear(struct oidmap *map, int free_entries)
{
if (!map)
return;
diff --git a/oidmap.h b/oidmap.h
index fad412827a..67fb32290f 100644
--- a/oidmap.h
+++ b/oidmap.h
@@ -36,12 +36,13 @@ struct oidmap {
void oidmap_init(struct oidmap *map, size_t initial_size);
/*
- * Frees an oidmap structure and allocated memory.
+ * Clear an oidmap, freeing any allocated memory. The map is empty and
+ * can be reused without another explicit init.
*
* If `free_entries` is true, each oidmap_entry in the map is freed as well
* using stdlibs free().
*/
-void oidmap_free(struct oidmap *map, int free_entries);
+void oidmap_clear(struct oidmap *map, int free_entries);
/*
* Returns the oidmap entry for the specified oid, or NULL if not found.
@@ -66,6 +67,10 @@ void *oidmap_put(struct oidmap *map, void *entry);
*/
void *oidmap_remove(struct oidmap *map, const struct object_id *key);
+static inline unsigned int oidmap_get_size(struct oidmap *map)
+{
+ return hashmap_get_size(&map->map);
+}
struct oidmap_iter {
struct hashmap_iter h_iter;
diff --git a/replace-object.c b/replace-object.c
index 7b8a09b5cb..f8c5f68837 100644
--- a/replace-object.c
+++ b/replace-object.c
@@ -31,7 +31,7 @@ static int register_replace_ref(const char *refname,
oidcpy(&repl_obj->replacement, oid);
/* Register new object */
- if (oidmap_put(r->objects->replace_map, repl_obj))
+ if (oidmap_put(&r->objects->replace_map, repl_obj))
die(_("duplicate replace ref: %s"), refname);
return 0;
@@ -48,9 +48,7 @@ void prepare_replace_object(struct repository *r)
return;
}
- r->objects->replace_map =
- xmalloc(sizeof(*r->objects->replace_map));
- oidmap_init(r->objects->replace_map, 0);
+ oidmap_init(&r->objects->replace_map, 0);
refs_for_each_replace_ref(get_main_ref_store(r),
register_replace_ref, r);
@@ -80,7 +78,7 @@ const struct object_id *do_lookup_replace_object(struct repository *r,
/* Try to recursively replace the object */
while (depth-- > 0) {
struct replace_object *repl_obj =
- oidmap_get(r->objects->replace_map, cur);
+ oidmap_get(&r->objects->replace_map, cur);
if (!repl_obj)
return cur;
cur = &repl_obj->replacement;
diff --git a/replace-object.h b/replace-object.h
index ba478eb30c..3052e96a62 100644
--- a/replace-object.h
+++ b/replace-object.h
@@ -47,7 +47,7 @@ static inline const struct object_id *lookup_replace_object(struct repository *r
{
if (!replace_refs_enabled(r) ||
(r->objects->replace_map_initialized &&
- r->objects->replace_map->map.tablesize == 0))
+ oidmap_get_size(&r->objects->replace_map) == 0))
return oid;
return do_lookup_replace_object(r, oid);
}
diff --git a/sequencer.c b/sequencer.c
index 4e77da475c..4edf66fb28 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -6051,8 +6051,8 @@ static int make_script_with_merges(struct pretty_print_context *pp,
oidset_clear(&interesting);
oidset_clear(&child_seen);
oidset_clear(&shown);
- oidmap_free(&commit2todo, 1);
- oidmap_free(&state.commit2label, 1);
+ oidmap_clear(&commit2todo, 1);
+ oidmap_clear(&state.commit2label, 1);
hashmap_clear_and_free(&state.labels, struct labels_entry, entry);
strbuf_release(&state.buf);
diff --git a/t/unit-tests/u-oidmap.c b/t/unit-tests/u-oidmap.c
index dc805b7e3c..b23af449f6 100644
--- a/t/unit-tests/u-oidmap.c
+++ b/t/unit-tests/u-oidmap.c
@@ -35,7 +35,7 @@ void test_oidmap__initialize(void)
void test_oidmap__cleanup(void)
{
- oidmap_free(&map, 1);
+ oidmap_clear(&map, 1);
}
void test_oidmap__replace(void)