treewide: deprecate git_config_maybe_bool, use git_parse_maybe_bool
[gitweb.git] / replace_object.c
index 6fc3ff47b14740d7a1a31ada23ac1f9c940d4acb..f0b39f06d5dabc3c98c5c083458736a585b4cabb 100644 (file)
@@ -41,12 +41,8 @@ static int register_replace_object(struct replace_object *replace,
                return 1;
        }
        pos = -pos - 1;
-       if (replace_object_alloc <= ++replace_object_nr) {
-               replace_object_alloc = alloc_nr(replace_object_alloc);
-               replace_object = xrealloc(replace_object,
-                                         sizeof(*replace_object) *
-                                         replace_object_alloc);
-       }
+       ALLOC_GROW(replace_object, replace_object_nr + 1, replace_object_alloc);
+       replace_object_nr++;
        if (pos < replace_object_nr)
                memmove(replace_object + pos + 1,
                        replace_object + pos,
@@ -57,7 +53,7 @@ static int register_replace_object(struct replace_object *replace,
 }
 
 static int register_replace_ref(const char *refname,
-                               const unsigned char *sha1,
+                               const struct object_id *oid,
                                int flag, void *cb_data)
 {
        /* Get sha1 from refname */
@@ -72,7 +68,7 @@ static int register_replace_ref(const char *refname,
        }
 
        /* Copy sha1 from the read ref */
-       hashcpy(repl_obj->replacement, sha1);
+       hashcpy(repl_obj->replacement, oid->hash);
 
        /* Register new object */
        if (register_replace_object(repl_obj, 1))
@@ -91,12 +87,19 @@ static void prepare_replace_object(void)
        for_each_replace_ref(register_replace_ref, NULL);
        replace_object_prepared = 1;
        if (!replace_object_nr)
-               read_replace_refs = 0;
+               check_replace_refs = 0;
 }
 
 /* We allow "recursive" replacement. Only within reason, though */
 #define MAXREPLACEDEPTH 5
 
+/*
+ * If a replacement for object sha1 has been set up, return the
+ * replacement object's name (replaced recursively, if necessary).
+ * The return value is either sha1 or a pointer to a
+ * permanently-allocated value.  This function always respects replace
+ * references, regardless of the value of check_replace_refs.
+ */
 const unsigned char *do_lookup_replace_object(const unsigned char *sha1)
 {
        int pos, depth = MAXREPLACEDEPTH;