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

Re: [PATCH v3 4/6] usage: add show_usage_and_exit_if_asked()

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 16, 2025, 17:22 UTC
Message-ID
<xmqqbjw6u101.fsf@gitster.g>
In-Reply-To
<20250116103620.GB773990@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 5 quoted lines
>> 	show_usage_and_exit_if_asked(argc, argv, usage);
>> 
>> to help correct these code paths.
>
> I found the name hard to distinguish from the earlier helper,
As we all know that usage_with_options() and usage() exits,
    show_usage_with_options_if_asked()
    show_usage_if_asked()

may be good enough, I wonder? "show" -> "help" may give us better names.

Show 6 quoted lines
> I think the "and_exit" could probably be implied, since showing the
> usage is always a final thing (just like in usage() and
> usage_with_options()). So:
>
>   show_usage_if_asked();
>   show_usage_with_options_if_asked();

Ah, We came to the same conclusion. The only thing we haven't made it obvious is that "show" implies the output goes to the standard output stream, while without "show", the output goes to the standard error stream. I wonder if these help better:

    show_help_if_asked();
    show_help_with_options_if_asked()

"show help" explains the output goes to where the "help" message would go ;-)

But probably "if-asked" is clear enough indication that the output is made in response to an explicit end-user request, so let's take the show_(usage|usage_with_options)_if_asked as the final names.

Show 22 quoted lines
>> -static void vreportf(const char *prefix, const char *err, va_list params)
>> +static void vfdreportf(int fd, const char *prefix, const char *err, va_list params)
>>  {
>>  	char msg[4096];
>>  	char *p, *pend = msg + sizeof(msg);
>> @@ -32,8 +32,14 @@ static void vreportf(const char *prefix, const char *err, va_list params)
>>  	}
>>  
>>  	*(p++) = '\n'; /* we no longer need a NUL */
>> -	fflush(stderr);
>> -	write_in_full(2, msg, p - msg);
>> +	if (fd == 2)
>> +		fflush(stderr);
>> +	write_in_full(fd, msg, p - msg);
>> +}
>
> Gross. :) I think the existing code is conceptually:
>
>   write_in_full(fileno(stderr), msg, p - msg);
>
> In which case vfreportf() could just take a FILE*, flush it and then
> write.

Sure, but these "stderr" are real error reporting that need to stay to be stderr, and flush needs to be done only when our true payload goes to fd#2 and I do not think these fflush() are about stdio calls made by the caller _before_ it called this function. It may become a bit tricky to read the resulting code if we pass "FILE *".

Previous: Jeff KingNext: Jeff King
Message 8 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.