All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH v4 5/6] oddballs: send usage() help text to standard output
Date: Thu, 16 Jan 2025 13:35:52 -0800	[thread overview]
Message-ID: <20250116213553.2563751-6-gitster@pobox.com> (raw)
In-Reply-To: <20250116213553.2563751-1-gitster@pobox.com>

Using the show_usage_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(...);

There are (unnecessarily) being clever ones that 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 like "git var -h" just do not treat "-h" any specially, and let
it take the same error code paths as a parameter error.

Now we cannot do the same, so these callers are rewrittin to do the
show_usage_and_exit_if_asked() first and then handle the usage error
the way they used to.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * Helper function renamed.
   Fix fo fetch-pack.c moved from the next step and redone.

 builtin/credential.c     | 3 ++-
 builtin/fetch-pack.c     | 2 ++
 builtin/unpack-file.c    | 8 ++++++--
 builtin/upload-archive.c | 3 ++-
 builtin/var.c            | 1 +
 5 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/builtin/credential.c b/builtin/credential.c
index 14c8c6608b..f6fc948123 100644
--- a/builtin/credential.c
+++ b/builtin/credential.c
@@ -18,7 +18,8 @@ int cmd_credential(int argc,
 
 	git_config(git_default_config, NULL);
 
-	if (argc != 2 || !strcmp(argv[1], "-h"))
+	show_usage_if_asked(argc, argv, usage_msg);
+	if (argc != 2)
 		usage(usage_msg);
 	op = argv[1];
 
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index bed2816c2d..d07eec9e55 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -75,6 +75,8 @@ int cmd_fetch_pack(int argc,
 	list_objects_filter_init(&args.filter_options);
 	args.uploadpack = "git-upload-pack";
 
+	show_usage_if_asked(argc, argv, fetch_pack_usage);
+
 	for (i = 1; i < argc && *argv[i] == '-'; i++) {
 		const char *arg = argv[i];
 
diff --git a/builtin/unpack-file.c b/builtin/unpack-file.c
index 6da2825753..fb5fcbc40a 100644
--- a/builtin/unpack-file.c
+++ b/builtin/unpack-file.c
@@ -26,6 +26,9 @@ static char *create_temp_file(struct object_id *oid)
 	return path;
 }
 
+static const char usage_msg[] =
+"git unpack-file <blob>";
+
 int cmd_unpack_file(int argc,
 		    const char **argv,
 		    const char *prefix UNUSED,
@@ -33,8 +36,9 @@ int cmd_unpack_file(int argc,
 {
 	struct object_id oid;
 
-	if (argc != 2 || !strcmp(argv[1], "-h"))
-		usage("git unpack-file <blob>");
+	show_usage_if_asked(argc, argv, usage_msg);
+	if (argc != 2)
+		usage(usage_msg);
 	if (repo_get_oid(the_repository, argv[1], &oid))
 		die("Not a valid object name %s", argv[1]);
 
diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c
index 9e9343f121..9d76a31c8f 100644
--- a/builtin/upload-archive.c
+++ b/builtin/upload-archive.c
@@ -27,7 +27,8 @@ int cmd_upload_archive_writer(int argc,
 	const char *arg_cmd = "argument ";
 	int ret;
 
-	if (argc != 2 || !strcmp(argv[1], "-h"))
+	show_usage_if_asked(argc, argv, upload_archive_usage);
+	if (argc != 2)
 		usage(upload_archive_usage);
 
 	if (!enter_repo(argv[1], 0))
diff --git a/builtin/var.c b/builtin/var.c
index 1449656cc9..46d40d6fba 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_if_asked(argc, argv, var_usage);
 	if (argc != 2)
 		usage(var_usage);
 
-- 
2.48.1-191-gafe818080f


  parent reply	other threads:[~2025-01-16 21:36 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   ` [PATCH v4 2/6] parse-options: add show_usage_with_options_if_asked() Junio C Hamano
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   ` Junio C Hamano [this message]
2025-01-16 21:35   ` [PATCH v4 6/6] builtin: send usage() " 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-6-gitster@pobox.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    /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.