]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap.c: support bitmap pack-reuse with incremental MIDXs
authorTaylor Blau <me@ttaylorr.com>
Thu, 20 Mar 2025 17:56:43 +0000 (13:56 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 21 Mar 2025 11:33:49 +0000 (04:33 -0700)
In a similar fashion as previous commits in the first phase of
incremental MIDXs, enumerate not just the packs in the current
incremental MIDX layer, but previous ones as well.

Likewise, in reuse_partial_packfile_from_bitmap(), when reusing only a
single pack from a MIDX, use the oldest layer's preferred pack as it is
likely to contain the largest number of reusable sections.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Acked-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-bitmap.c

index f3ef9e43ef8a16090252abb6543656accabfd7ab..5ff1bbfd542df3be4d6aeec39895791cf4becf7e 100644 (file)
@@ -2335,7 +2335,8 @@ void reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
                multi_pack_reuse = 0;
 
        if (multi_pack_reuse) {
-               for (i = 0; i < bitmap_git->midx->num_packs; i++) {
+               struct multi_pack_index *m = bitmap_git->midx;
+               for (i = 0; i < m->num_packs + m->num_packs_in_base; i++) {
                        struct bitmapped_pack pack;
                        if (nth_bitmapped_pack(r, bitmap_git->midx, &pack, i) < 0) {
                                warning(_("unable to load pack: '%s', disabling pack-reuse"),
@@ -2361,14 +2362,18 @@ void reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
                uint32_t pack_int_id;
 
                if (bitmap_is_midx(bitmap_git)) {
+                       struct multi_pack_index *m = bitmap_git->midx;
                        uint32_t preferred_pack_pos;
 
-                       if (midx_preferred_pack(bitmap_git->midx, &preferred_pack_pos) < 0) {
+                       while (m->base_midx)
+                               m = m->base_midx;
+
+                       if (midx_preferred_pack(m, &preferred_pack_pos) < 0) {
                                warning(_("unable to compute preferred pack, disabling pack-reuse"));
                                return;
                        }
 
-                       pack = bitmap_git->midx->packs[preferred_pack_pos];
+                       pack = nth_midxed_pack(m, preferred_pack_pos);
                        pack_int_id = preferred_pack_pos;
                } else {
                        pack = bitmap_git->pack;