Re: [PATCH 08/11] midx-write.c: avoid directly managed temporary strbuf
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 25, 2024, 20:33 UTC
- Message-ID
- <xmqqv85ahx14.fsf@gitster.g>
- In-Reply-To
- <8e32755c492d20eec02c81351d249ce34cc6d7b9.1711387439.git.me@ttaylorr.com>
Taylor Blau <me@ttaylorr.com> writes:
Show 13 quoted lines
> In midx-write.c::midx_repack(), we construct the command-line arguments > for a pack-objects invocation which will combine objects from the packs > below our `--batch-size` option. > > To construct the base name of the output pack, we use a temporary > strbuf, and then push the result of that onto the strvec which holds the > command-line arguments, after which point we release the strbuf. > > We could replace this by doing something like: > > struct strbuf buf = STRBUF_INIT; > strbuf_addf(&buf, "%s/pack/pack", object_dir); > strvec_push_nodup(&cmd.args, strbuf_detach(&buf));
Hmph, I thought I saw another patch recently that uses strvec_pushf() to simplify such a sequence. Does the technique apply here as well?
Ah, yes, exactly. See <9483038c-9529-4243-9b9a-97254fac29c1@web.de>
Show 20 quoted lines
> @@ -1473,10 +1472,6 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, > > strvec_push(&cmd.args, "pack-objects"); > > - strbuf_addstr(&base_name, object_dir); > - strbuf_addstr(&base_name, "/pack/pack"); > - strvec_push(&cmd.args, base_name.buf); > - > if (delta_base_offset) > strvec_push(&cmd.args, "--delta-base-offset"); > if (use_delta_islands) > @@ -1487,7 +1482,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, > else > strvec_push(&cmd.args, "-q"); > > - strbuf_release(&base_name); > + strvec_pushf(&cmd.args, "%s/pack/pack", object_dir); > > cmd.git_cmd = 1; > cmd.in = cmd.out = -1;