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@xxxxxxxxxxxx> --- midx.c | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/midx.c b/midx.c index cdb6c481c7..0d40089c4d 100644 --- 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; -- 2.37.0.1.g1379af2e9d