]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/gc.c: guess the size of the revindex
authorTaylor Blau <me@ttaylorr.com>
Wed, 13 Jan 2021 22:24:54 +0000 (17:24 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Jan 2021 05:53:47 +0000 (21:53 -0800)
'estimate_repack_memory()' takes into account the amount of memory
required to load the reverse index in memory by multiplying the assumed
number of objects by the size of the 'revindex_entry' struct.

Prepare for hiding the definition of 'struct revindex_entry' by removing
a 'sizeof()' of that type from outside of pack-revindex.c. Instead,
guess that one off_t and one uint32_t are required per object. Strictly
speaking, this is a worse guess than asking for 'sizeof(struct
revindex_entry)' directly, since the true size of this struct is 16
bytes with padding on the end of the struct in order to align the offset
field.

But, this is an approximation anyway, and it does remove a use of the
'struct revindex_entry' from outside of pack-revindex internals.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/gc.c

index 4c24f418520a6072ccea8fcd101643f735ac5e9d..c60811f21220e4ba947351fcdf40592e19dfd037 100644 (file)
@@ -301,7 +301,7 @@ static uint64_t estimate_repack_memory(struct packed_git *pack)
        /* and then obj_hash[], underestimated in fact */
        heap += sizeof(struct object *) * nr_objects;
        /* revindex is used also */
-       heap += sizeof(struct revindex_entry) * nr_objects;
+       heap += (sizeof(off_t) + sizeof(uint32_t)) * nr_objects;
        /*
         * read_sha1_file() (either at delta calculation phase, or
         * writing phase) also fills up the delta base cache