From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/2] die_for_incompatible_opts(): accept more than four options
Date: Sat, 29 Aug 2026 07:14:18 -0400 [thread overview]
Message-ID: <20260829111418.GA40814@coredump.intra.peff.net> (raw)
In-Reply-To: <xmqqv78vbphh.fsf@gitster.g>
On Thu, Aug 27, 2026 at 07:35:38AM -0700, Junio C Hamano wrote:
> > So that makes sense. Of course the follow-on question is whether any
> > callers actually want to pass more than 4 options. I don't see any
> > patches adding new calls.
>
> There isn't. While I was writing [*], I wondered if the two calls
> next to each other for opt3 and opt4 want to be combined to opt7.
OK. I wonder if we're approaching churn here, but I don't have a strong
feeling.
> I think I can do without [1/2], by the way.
>
> - die_for_incompatible_optN() (2 <= N <= 4) will keep accepting N
> pairs of <int, const char *>
>
> - die_for_incompatible_opts() will take pairs of <int, const char *>,
> expects "int" to be 0 (not set), 1 (set), or EOF==-1 (sentinel).
>
> - static inline void die_for_incompatible_opt2() emulation layer
> will call die_for_incompatible_opts(!!opt1, opt1_name, !!opt2,
> opt2_name, EOF). Similarly for opt3() and opt4() variants.
Yeah, but then you can't get good compiler support, since I don't think
there is an integer equivalent to LAST_ARG_MUST_BE_NULL. So the varargs
interface feels less safe (and strictly worse since we are not actually
helping any case that has more than 4 items).
If we're not actually exposing the varargs version and expect people to
use the counted wrappers, then it's not as big a risk. But then I wonder
what the value of the patch is.
> We could switch to dynamic allocations immediately after we see
> option[] filled, as we are committed to die() at that point and can
> afford to waste cycles. That way, for die_for_incompatible_opt10()
> when the end-user uses 7 of them, we can fill option[4], switch to
> dynamic allocation to collect all 7 of them and report.
>
> The reason I chose not to is primarily because we cannot use the
> existing message templates in that case, hurting i18n/l10n.
Yeah, that makes sense.
-Peff
next prev parent reply other threads:[~2026-08-29 11:14 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 23:31 [PATCH 0/2] die_for_incompatible_opts(): unbounded number of options Junio C Hamano
2026-08-26 23:31 ` [PATCH 1/2] die_for_incompatible_optN: swap the order of arguments Junio C Hamano
2026-08-26 23:31 ` [PATCH 2/2] die_for_incompatible_opts(): accept more than four options Junio C Hamano
2026-08-27 1:19 ` Elijah Newren
2026-08-27 14:22 ` Junio C Hamano
2026-08-27 4:55 ` Jeff King
2026-08-27 14:35 ` Junio C Hamano
2026-08-29 11:14 ` Jeff King [this message]
2026-08-29 17:51 ` Junio C Hamano
2026-08-29 18:04 ` René Scharfe
2026-08-27 17:28 ` [PATCH v2] die_for_incompatible_opts(): unbounded number of options Junio C Hamano
2026-08-29 11:15 ` Jeff King
2026-08-30 20:55 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260829111418.GA40814@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.