]> git.ipfire.org Git - thirdparty/git.git/commitdiff
midx.c: extract `midx_fanout_add_midx_fanout()`
authorTaylor Blau <me@ttaylorr.com>
Mon, 22 Aug 2022 19:50:41 +0000 (15:50 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Aug 2022 20:04:22 +0000 (13:04 -0700)
Extract a routine to add all objects whose object ID's first byte is
`cur_fanout` from an existing MIDX.

This function will only be called once, so extracting it is purely
cosmetic to improve the readability of `get_sorted_entries()` (its sole
caller) below.

The functionality is unchanged in this commit.

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

diff --git a/midx.c b/midx.c
index b4f6e37cd088a3c6d418dfd3a5ed912b4e52e3fd..17bdceed25b39ae8132039c8e5b9db933f0d7e39 100644 (file)
--- a/midx.c
+++ b/midx.c
@@ -593,6 +593,31 @@ static void midx_fanout_sort(struct midx_fanout *fanout)
        QSORT(fanout->entries, fanout->nr, midx_oid_compare);
 }
 
+static void midx_fanout_add_midx_fanout(struct midx_fanout *fanout,
+                                       struct multi_pack_index *m,
+                                       int preferred_pack,
+                                       uint32_t cur_fanout)
+{
+       uint32_t start = 0, end;
+       uint32_t cur_object;
+
+       if (cur_fanout)
+               start = ntohl(m->chunk_oid_fanout[cur_fanout - 1]);
+       end = ntohl(m->chunk_oid_fanout[cur_fanout]);
+
+       for (cur_object = start; cur_object < end; cur_object++) {
+               midx_fanout_grow(fanout, fanout->nr + 1);
+               nth_midxed_pack_midx_entry(m,
+                                          &fanout->entries[fanout->nr],
+                                          cur_object);
+               if (nth_midxed_pack_int_id(m, cur_object) == preferred_pack)
+                       fanout->entries[fanout->nr].preferred = 1;
+               else
+                       fanout->entries[fanout->nr].preferred = 0;
+               fanout->nr++;
+       }
+}
+
 /*
  * It is possible to artificially get into a state where there are many
  * duplicate copies of objects. That can create high memory pressure if
@@ -633,25 +658,9 @@ static struct pack_midx_entry *get_sorted_entries(struct multi_pack_index *m,
        for (cur_fanout = 0; cur_fanout < 256; cur_fanout++) {
                fanout.nr = 0;
 
-               if (m) {
-                       uint32_t start = 0, end;
-
-                       if (cur_fanout)
-                               start = ntohl(m->chunk_oid_fanout[cur_fanout - 1]);
-                       end = ntohl(m->chunk_oid_fanout[cur_fanout]);
-
-                       for (cur_object = start; cur_object < end; cur_object++) {
-                               midx_fanout_grow(&fanout, fanout.nr + 1);
-                               nth_midxed_pack_midx_entry(m,
-                                                          &fanout.entries[fanout.nr],
-                                                          cur_object);
-                               if (nth_midxed_pack_int_id(m, cur_object) == preferred_pack)
-                                       fanout.entries[fanout.nr].preferred = 1;
-                               else
-                                       fanout.entries[fanout.nr].preferred = 0;
-                               fanout.nr++;
-                       }
-               }
+               if (m)
+                       midx_fanout_add_midx_fanout(&fanout, m, preferred_pack,
+                                                   cur_fanout);
 
                for (cur_pack = start_pack; cur_pack < nr_packs; cur_pack++) {
                        uint32_t start = 0, end;