Re: [PATCH v4 08/17] builtin/pack-objects.c: --cruft without expiration
- From
Taylor Blau <me@ttaylorr.com>
- Date
- May 20, 2022, 22:52 UTC
- Message-ID
- <YogbupkkDSysm6Yw@nand.local>
- In-Reply-To
- <xmqqv8u1r1r2.fsf@gitster.g>
On Thu, May 19, 2022 at 08:16:49AM -0700, Junio C Hamano wrote:
Show 34 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
> > Taylor Blau <me@ttaylorr.com> writes:
> >
> >> @@ -3870,6 +4034,20 @@ static int option_parse_unpack_unreachable(const struct option *opt,
> >> return 0;
> >> }
> >>
> >> +static int option_parse_cruft_expiration(const struct option *opt,
> >> + const char *arg, int unset)
> >> +{
> >> + if (unset) {
> >> + cruft = 0;
> >> + cruft_expiration = 0;
> >> + } else {
> >> + cruft = 1;
> >> + if (arg)
> >> + cruft_expiration = approxidate(arg);
> >> + }
> >> + return 0;
> >> +}
> >
> > It is somewhat sad that we have to invent this function, instead of
> > using parse_opt_expiry_date_cb().
>
> I failed to mention that this one does more than the bog-standard
> callback so the latter cannot be reused as-is, and that is what I
> meant by "somewhat sad". If we can find a way to reuse the
> parse_opt_expiry_date_cb() for the purpose of the user of this
> function that would be ideal, but only if we can do so without
> making the caller too unnatural. Having two separate values, "did
> we get --cruft-expiration option?" and "what's the value of it?",
> does benefit the current caller and we do not want to twist it just
> for not adding a similar callback---that's a tail wagging a dog.I agree, though I'm not sure such a cleanup is possible: if the caller specified `--cruft-expiration=never`, how would we distinguish that from "the caller did not want to generate cruft packs"?
In that case, approxidate() would set our `cruft_expiration` variable to `0` there, which makes "generate a cruft pack without expiring any objects" indistinguishable from "do not generate a cruft pack" without the additional bit of information stored in the "cruft" variable.
For now we're just recycling the pattern from the callback immediately above this one: option_parse_unpack_unreachable().
Thanks, Taylor