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

Re: [PATCH v3 5/6] oddballs: send usage() help text to standard output

From
Jeff King <peff@peff.net>
Date
Jan 16, 2025, 10:42 UTC
Message-ID
<20250116104219.GC773990@coredump.intra.peff.net>
In-Reply-To
<20250116012524.1557441-6-gitster@pobox.com>
On Wed, Jan 15, 2025 at 05:25:22PM -0800, Junio C Hamano wrote:
Show 21 quoted lines
> Using the show_usage_and_exit_if_asked() helper we introduced
> earlier, fix callers of usage() that want to show the help text when
> explicitly asked by the end-user.  The help text now goes to the
> standard output stream for them.
> 
> The callers in this step are oddballs in that their invocations of
> usage() are *not* guarded by
> 
> 	if (argc == 2 && !strcmp(argv[1], "-h")
> 		usage(...);
> 
> They are (unnecessarily) being clever and do things like
> 
> 	if (argc != 2 || !strcmp(argv[1], "-h")
> 		usage(...);
> 
> to say "I know I take only one argument, so argc != 2 is always an
> error regardless of what is in argv[].  Ah, by the way, even if argc
> is 2, "-h" is a request for usage text, so we do the same".  Some
> just do not treat "-h" any specially, and let it take the same error
> code paths as a parameter error.
As the author of at least one of these, I feel judged. :)

But yes, untangling this is obviously good (especially if we change the exit code later!). And pulling these into their own commit made reviewing much easier.

Show 11 quoted lines
> diff --git a/builtin/var.c b/builtin/var.c
> index 1449656cc9..6a09c1c39a 100644
> --- a/builtin/var.c
> +++ b/builtin/var.c
> @@ -221,6 +221,7 @@ int cmd_var(int argc,
>  	const struct git_var *git_var;
>  	char *val;
>  
> +	show_usage_and_exit_if_asked(argc, argv, var_usage);
>  	if (argc != 2)
>  		usage(var_usage);
Hmm, what's going on in this one? It does not check "-h" at all.

Ah, I see. It simply hits the get_git_var() call, sees there is no var called "-h", and exits with an error. So checking for "-h" up front is correct. It is an oddball, though not quite the same as the others (the oddest ball?).

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 12 of 37 in “Send help text from "git cmd -h" to stdout”
  1. 0/6 Send help text from "git cmd -h" to stdoutJunio C Hamano, Jan 16, 2025
  2. 1/6 parse-options: add show_usage_help_and_exit_if_asked()Junio C Hamano, Jan 16, 2025
  3. 2/6 t0012: optionally check that "-h" output goes to stdoutJunio C Hamano, Jan 16, 2025
  4. 3/6 builtins: send usage_with_options() help text to standard outputJunio C Hamano, Jan 16, 2025
  5. 4/6 usage: add show_usage_and_exit_if_asked()Junio C Hamano, Jan 16, 2025
  6. Jeff KingJan 16, 2025
  7. Jeff KingJan 16, 2025
  8. Junio C HamanoJan 16, 2025
  9. Jeff KingJan 16, 2025
  10. Junio C HamanoJan 16, 2025
  11. 5/6 oddballs: send usage() help text to standard outputJunio C Hamano, Jan 16, 2025
  12. Jeff KingJan 16, 2025
  13. Junio C HamanoJan 16, 2025
  14. 6/6 builtin: send usage() help text to standard outputJunio C Hamano, Jan 16, 2025
  15. Junio C HamanoJan 16, 2025
  16. Junio C HamanoJan 16, 2025
  17. Jeff KingJan 16, 2025
  18. Junio C HamanoJan 16, 2025
  19. 0/6 Send help text from "git cmd -h" to stdoutJunio C Hamano, Jan 16, 2025
  20. 1/6 t0012: optionally check that "-h" output goes to stdoutJunio C Hamano, Jan 16, 2025
  21. 2/6 parse-options: add show_usage_with_options_if_asked()Junio C Hamano, Jan 16, 2025
  22. 3/6 usage: add show_usage_if_asked()Junio C Hamano, Jan 16, 2025
  23. Junio C HamanoJan 16, 2025
  24. Jeff KingJan 17, 2025
  25. 4/6 builtins: send usage_with_options() help text to standard outputJunio C Hamano, Jan 16, 2025
  26. 5/6 oddballs: send usage() help text to standard outputJunio C Hamano, Jan 16, 2025
  27. 6/6 builtin: send usage() help text to standard outputJunio C Hamano, Jan 16, 2025
  28. Jeff KingJan 17, 2025
  29. Junio C HamanoJan 17, 2025
  30. 0/6 Send help text from "git cmd -h" to stdoutJunio C Hamano, Jan 17, 2025
  31. 1/6 t0012: optionally check that "-h" output goes to stdoutJunio C Hamano, Jan 17, 2025
  32. 2/6 parse-options: add show_usage_with_options_if_asked()Junio C Hamano, Jan 17, 2025
  33. 3/6 usage: add show_usage_if_asked()Junio C Hamano, Jan 17, 2025
  34. 4/6 builtins: send usage_with_options() help text to standard outputJunio C Hamano, Jan 17, 2025
  35. 5/6 oddballs: send usage() help text to standard outputJunio C Hamano, Jan 17, 2025
  36. 6/6 builtin: send usage() help text to standard outputJunio C Hamano, Jan 17, 2025
  37. Jeff KingJan 18, 2025

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.