From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: Jeff King <peff@peff.net>
Subject: [PATCH v4 2/6] parse-options: add show_usage_with_options_if_asked()
Date: Thu, 16 Jan 2025 13:35:49 -0800 [thread overview]
Message-ID: <20250116213553.2563751-3-gitster@pobox.com> (raw)
In-Reply-To: <20250116213553.2563751-1-gitster@pobox.com>
Many commands call usage_with_options() when they are asked to give
the help message, but it sends the help text to the standard error
stream. When the user asked for it with "git cmd -h", the help
message is the primary output from the command, hence we should send
it to the standard output stream, instead.
Introduce a helper function that captures the common pattern
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(usage, options);
and replaces it with
show_usage_with_options_if_asked(argc, argv, usage, options);
to help correct code paths.
Note that this helper function still exits with status 129, and
t0012 insists on it. After converting all the mistaken callers of
usage_with_options() to call this new helper, we may want to address
it---the end user is asking us to give the help text, and we are
doing exactly as asked, so there is no reason to exit with non-zero
status.
Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
* Helper function renamed.
parse-options.c | 10 ++++++++++
parse-options.h | 4 ++++
2 files changed, 14 insertions(+)
diff --git a/parse-options.c b/parse-options.c
index 33bfba0ed4..4051a8e1d1 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1282,6 +1282,16 @@ void NORETURN usage_with_options(const char * const *usagestr,
exit(129);
}
+void show_usage_with_options_if_asked(int ac, const char **av,
+ const char * const *usagestr,
+ const struct option *opts)
+{
+ if (ac == 2 && !strcmp(av[1], "-h")) {
+ usage_with_options_internal(NULL, usagestr, opts, 0, 0);
+ exit(129);
+ }
+}
+
void NORETURN usage_msg_opt(const char *msg,
const char * const *usagestr,
const struct option *options)
diff --git a/parse-options.h b/parse-options.h
index d01361ca97..39f0886254 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -402,6 +402,10 @@ int parse_options(int argc, const char **argv, const char *prefix,
NORETURN void usage_with_options(const char * const *usagestr,
const struct option *options);
+void show_usage_with_options_if_asked(int ac, const char **av,
+ const char * const *usage,
+ const struct option *options);
+
NORETURN void usage_msg_opt(const char *msg,
const char * const *usagestr,
const struct option *options);
--
2.48.1-191-gafe818080f
next prev parent reply other threads:[~2025-01-16 21:35 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-16 1:25 [PATCH v3 0/6] Send help text from "git cmd -h" to stdout Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 1/6] parse-options: add show_usage_help_and_exit_if_asked() Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 2/6] t0012: optionally check that "-h" output goes to stdout Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 3/6] builtins: send usage_with_options() help text to standard output Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 4/6] usage: add show_usage_and_exit_if_asked() Junio C Hamano
2025-01-16 10:36 ` Jeff King
2025-01-16 10:44 ` Jeff King
2025-01-16 17:22 ` Junio C Hamano
2025-01-16 21:54 ` Jeff King
2025-01-16 22:26 ` Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 5/6] oddballs: send usage() help text to standard output Junio C Hamano
2025-01-16 10:42 ` Jeff King
2025-01-16 17:24 ` Junio C Hamano
2025-01-16 1:25 ` [PATCH v3 6/6] builtin: " Junio C Hamano
2025-01-16 17:30 ` Junio C Hamano
2025-01-16 20:37 ` Junio C Hamano
2025-01-16 10:46 ` [PATCH v3 0/6] Send help text from "git cmd -h" to stdout Jeff King
2025-01-16 17:28 ` Junio C Hamano
2025-01-16 21:35 ` [PATCH v4 " Junio C Hamano
2025-01-16 21:35 ` [PATCH v4 1/6] t0012: optionally check that "-h" output goes " Junio C Hamano
2025-01-16 21:35 ` Junio C Hamano [this message]
2025-01-16 21:35 ` [PATCH v4 3/6] usage: add show_usage_if_asked() Junio C Hamano
2025-01-16 23:00 ` Junio C Hamano
2025-01-17 11:41 ` Jeff King
2025-01-16 21:35 ` [PATCH v4 4/6] builtins: send usage_with_options() help text to standard output Junio C Hamano
2025-01-16 21:35 ` [PATCH v4 5/6] oddballs: send usage() " Junio C Hamano
2025-01-16 21:35 ` [PATCH v4 6/6] builtin: " Junio C Hamano
2025-01-17 11:42 ` Jeff King
2025-01-17 19:46 ` Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 0/6] Send help text from "git cmd -h" to stdout Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 1/6] t0012: optionally check that "-h" output goes " Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 2/6] parse-options: add show_usage_with_options_if_asked() Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 3/6] usage: add show_usage_if_asked() Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 4/6] builtins: send usage_with_options() help text to standard output Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 5/6] oddballs: send usage() " Junio C Hamano
2025-01-17 21:31 ` [PATCH v5 6/6] builtin: " Junio C Hamano
2025-01-18 11:42 ` [PATCH v5 0/6] Send help text from "git cmd -h" to stdout Jeff King
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=20250116213553.2563751-3-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).