packfile: add repository argument to unpack_entry
[gitweb.git] / replace_object.c
index 953fa9cc40c1831dc52547a9d30a369560b6a1d7..246b98cd4f1e4d229109bbeb8ffe90731df43df0 100644 (file)
@@ -31,19 +31,16 @@ static int register_replace_ref(const char *refname,
        return 0;
 }
 
-static void prepare_replace_object(void)
+static void prepare_replace_object(struct repository *r)
 {
-       if (the_repository->objects->replace_map)
+       if (r->objects->replace_map)
                return;
 
-       the_repository->objects->replace_map =
+       r->objects->replace_map =
                xmalloc(sizeof(*the_repository->objects->replace_map));
-       oidmap_init(the_repository->objects->replace_map, 0);
+       oidmap_init(r->objects->replace_map, 0);
 
-       for_each_replace_ref(register_replace_ref, NULL);
-
-       if (!the_repository->objects->replace_map->map.tablesize)
-               check_replace_refs = 0;
+       for_each_replace_ref(r, register_replace_ref, NULL);
 }
 
 /* We allow "recursive" replacement. Only within reason, though */
@@ -56,17 +53,18 @@ static void prepare_replace_object(void)
  * permanently-allocated value.  This function always respects replace
  * references, regardless of the value of check_replace_refs.
  */
-const struct object_id *do_lookup_replace_object(const struct object_id *oid)
+const struct object_id *do_lookup_replace_object(struct repository *r,
+                                                const struct object_id *oid)
 {
        int depth = MAXREPLACEDEPTH;
        const struct object_id *cur = oid;
 
-       prepare_replace_object();
+       prepare_replace_object(r);
 
        /* Try to recursively replace the object */
        while (depth-- > 0) {
                struct replace_object *repl_obj =
-                       oidmap_get(the_repository->objects->replace_map, cur);
+                       oidmap_get(r->objects->replace_map, cur);
                if (!repl_obj)
                        return cur;
                cur = &repl_obj->replacement;