diff options
-rw-r--r-- | object-store.h | 2 | ||||
-rw-r--r-- | replace_object.c | 16 |
2 files changed, 10 insertions, 8 deletions
diff --git a/object-store.h b/object-store.h index c04b4c95eb..1ff862c7f9 100644 --- a/object-store.h +++ b/object-store.h @@ -99,7 +99,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; /* * private data diff --git a/replace_object.c b/replace_object.c index afbdf2df25..953fa9cc40 100644 --- a/replace_object.c +++ b/replace_object.c @@ -25,7 +25,7 @@ static int register_replace_ref(const char *refname, oidcpy(&repl_obj->replacement, oid); /* Register new object */ - if (oidmap_put(&the_repository->objects->replace_map, repl_obj)) + if (oidmap_put(the_repository->objects->replace_map, repl_obj)) die("duplicate replace ref: %s", refname); return 0; @@ -33,14 +33,16 @@ static int register_replace_ref(const char *refname, static void prepare_replace_object(void) { - static int replace_object_prepared; - - if (replace_object_prepared) + if (the_repository->objects->replace_map) return; + the_repository->objects->replace_map = + xmalloc(sizeof(*the_repository->objects->replace_map)); + oidmap_init(the_repository->objects->replace_map, 0); + for_each_replace_ref(register_replace_ref, NULL); - replace_object_prepared = 1; - if (!the_repository->objects->replace_map.map.tablesize) + + if (!the_repository->objects->replace_map->map.tablesize) check_replace_refs = 0; } @@ -64,7 +66,7 @@ const struct object_id *do_lookup_replace_object(const struct object_id *oid) /* Try to recursively replace the object */ while (depth-- > 0) { struct replace_object *repl_obj = - oidmap_get(&the_repository->objects->replace_map, cur); + oidmap_get(the_repository->objects->replace_map, cur); if (!repl_obj) return cur; cur = &repl_obj->replacement; |