git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 4/5] config.c: add a "tristate" helper

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 9, 2021, 22:11 UTC
Message-ID
<xmqqv98vm7lt.fsf@gitster.g>
In-Reply-To
<YHCzhcBkqdeEMrWA@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 13 quoted lines
> It seems like it would be more convenient if you could pass it a bool
> value to turn the "auto" into. E.g., if you could do:
>
>   b = git_parse_maybe_tristate(value, 1); /* default to "1" */
>   if (b < 0)
>           do_error();
>   if (b)
>           do_true(); /* true, or maybe "auto" */
>   else
>           do_false();
>
> I dunno. That would probably be hard to represent via "git config
> --type". And some callers probably do care about "auto" versus "true".

It would work well for codepaths where computing the default value is cheap (or even possible).

I think the point of using "auto" is to delay the decision as late as possible. E.g. in-core parsed config and attribute may still want to stay "auto", until we actually get our hands on the blob contents to see if it is binary, until we know how heavily loaded the system is, until we know isatty(1), etc. Some are cheap to compute in advance, some are expensive and impossible until we meet the data.

So I still think the canonical use pattern for the "auto" thing is
	is_frotz = git_parse_bool_or_auto(value);
	... arbitrary number of things can happen here
	... the above may even be done in a git_config()
	... callback, and is_frotz may not even be used.
	if (is_frotz == AUTO)
		is_frotz = auto_detect_frotz();
	if (is_frotz)
		...; /* do the frotz thing */
	else
		...; /* do the non-frotz thing */
> It also feels funny calling this "tristate". Aren't there other
> tristates we could have besides "auto"? The command-line option is
> bool-or-auto, which is descriptive. Should this use a similar name?
I like that bool-or-auto name very much.
Previous: Jeff KingNext: Jeff King
Message 17 of 21 in “config: support --type=bool-or-auto for "tristate" parsing”
  1. 0/5 config: support --type=bool-or-auto for "tristate" parsingÆvar Arnfjörð Bjarmason, Apr 8, 2021
  2. 1/5 config.c: add a comment about why value=NULL is trueÆvar Arnfjörð Bjarmason, Apr 8, 2021
  3. Junio C HamanoApr 8, 2021
  4. 2/5 config tests: test for --bool-or-strÆvar Arnfjörð Bjarmason, Apr 8, 2021
  5. Junio C HamanoApr 8, 2021
  6. Ævar Arnfjörð BjarmasonApr 8, 2021
  7. 3/5 git-config: document --bool-or-str and --type=bool-or-strÆvar Arnfjörð Bjarmason, Apr 8, 2021
  8. Junio C HamanoApr 8, 2021
  9. 4/5 config.c: add a "tristate" helperÆvar Arnfjörð Bjarmason, Apr 8, 2021
  10. Junio C HamanoApr 8, 2021
  11. Ævar Arnfjörð BjarmasonApr 8, 2021
  12. Junio C HamanoApr 8, 2021
  13. Ævar Arnfjörð BjarmasonApr 9, 2021
  14. Junio C HamanoApr 9, 2021
  15. Junio C HamanoApr 8, 2021
  16. Jeff KingApr 9, 2021
  17. Junio C HamanoApr 9, 2021
  18. Jeff KingApr 10, 2021
  19. Junio C HamanoApr 10, 2021
  20. 5/5 config: add --type=bool-or-auto switchÆvar Arnfjörð Bjarmason, Apr 8, 2021
  21. Junio C HamanoApr 8, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.