From: Taylor Blau Date: Thu, 01 Oct 2026 04:12:02 GMT Subject: [PATCH v2 7/8] repack: defer allocating the append plan's write step Message-ID: <4a6504629a24cc802462f44b36f02b7118d2a9b7.1790827875.git.me@ttaylorr.com> In-Reply-To: The append plan creates a write step before iterating over newly written packs. The next change will consider additional packs and skip those already covered by the MIDX chain, so a non-empty candidate list will no longer imply that a write step is needed. Allocate the step when adding its first pack instead. Continue to consider only newly written packs here, preserving the existing plan. Signed-off-by: Taylor Blau --- repack-midx.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/repack-midx.c b/repack-midx.c index 61832114671..06eadb9df82 100644 --- a/repack-midx.c +++ b/repack-midx.c @@ -559,33 +559,28 @@ static void repack_make_midx_append_plan(struct repack_write_midx_opts *opts, struct odb_source_files *files = odb_source_files_downcast(opts->existing->source); struct multi_pack_index *m; struct midx_compaction_step *steps = NULL; - struct midx_compaction_step *step; + struct midx_compaction_step *step = NULL; + struct strbuf buf = STRBUF_INIT; size_t steps_nr = 0, steps_alloc = 0; + uint32_t i; odb_reprepare(opts->existing->repo->objects); m = get_multi_pack_index(files->packed); - if (opts->names->nr) { - struct strbuf buf = STRBUF_INIT; - uint32_t i; - - ALLOC_GROW(steps, st_add(steps_nr, 1), steps_alloc); - - step = &steps[steps_nr++]; - memset(step, 0, sizeof(*step)); - - step->type = MIDX_COMPACTION_STEP_WRITE; - string_list_init_dup(&step->u.write); - - for (i = 0; i < opts->names->nr; i++) { - strbuf_reset(&buf); - strbuf_addf(&buf, "pack-%s.idx", - opts->names->items[i].string); - string_list_append(&step->u.write, buf.buf); + for (i = 0; i < opts->names->nr; i++) { + if (!step) { + ALLOC_GROW(steps, st_add(steps_nr, 1), steps_alloc); + step = &steps[steps_nr++]; + memset(step, 0, sizeof(*step)); + step->type = MIDX_COMPACTION_STEP_WRITE; + string_list_init_dup(&step->u.write); } - - strbuf_release(&buf); + strbuf_reset(&buf); + strbuf_addf(&buf, "pack-%s.idx", + opts->names->items[i].string); + string_list_append(&step->u.write, buf.buf); } + strbuf_release(&buf); for (; m; m = m->base_midx) { ALLOC_GROW(steps, st_add(steps_nr, 1), steps_alloc); -- 2.56.0.8.ga42f775cbe2