Git development
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 2/4] parse-options: add a separate case for help output on error
Date: Thu, 2 Jul 2026 04:38:06 -0400	[thread overview]
Message-ID: <20260702083806.GA481298@coredump.intra.peff.net> (raw)
In-Reply-To: <20260701212442.1430084-3-sandals@crustytoothpaste.net>

On Wed, Jul 01, 2026 at 09:24:40PM +0000, brian m. carlson wrote:

> However, there are some cases where we print help output because the
> user has provided ambiguous or invalid input, such as an ambiguous
> option, and we'll want to exit unsuccessfully there.  Make this easier
> by defining a new return code, PARSE_OPT_HELP_ERROR, that can be used in
> this case, while reserving PARSE_OPT_HELP for those cases where the user
> has requested help directly.

Makes sense. We'd want to audit every spot that generates PARSE_OPT_HELP
and see if it should be PARSE_OPT_HELP_ERROR. I only see one spot
touched here:

> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -583,7 +583,7 @@ static enum parse_opt_result parse_long_opt(
>  			ambiguous.option->long_name,
>  			(abbrev.flags & OPT_UNSET) ?  "no-" : "",
>  			abbrev.option->long_name);
> -		return PARSE_OPT_HELP;
> +		return PARSE_OPT_HELP_ERROR;
>  	}

That one makes sense. The other site that generates it is within
usage_with_options_internal(), which handles both asked-for "-h" and
unexpected errors, but still always returns PARSE_OPT_HELP.

Ah...it looks like you _do_ switch it in patch 4 (when the distinction
between the two starts to make a difference). I think it should be done
in this patch, though, since the point is generating the correct
HELP/HELP_ERROR here (even though it does not yet matter).

I wonder if we'd also want:

diff --git a/parse-options.c b/parse-options.c
index 742444eead..08c21d9fc0 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1373,7 +1373,7 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
 	parse_options_check_harder(opts);
 
 	if (!usagestr)
-		return PARSE_OPT_HELP;
+		return err ? PARSE_OPT_HELP_ERROR : PARSE_OPT_HELP;
 
 	if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
 		fprintf(outfile, "cat <<\\EOF\n");

I can't figure out when we wouldn't have a usagestr, though. Perhaps not
ever from parse-options itself, but only when called via
usage_with_options() or something? That function does not look at our
return value so it would not matter, but it feels like we should keep
things consistent.

-Peff

  reply	other threads:[~2026-07-02  8:38 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-15  0:52 Unexpected exit code for --help with rev-parse --parseopt brian m. carlson
2026-03-15  3:14 ` Jeff King
2026-03-15 16:59   ` brian m. carlson
2026-03-15 18:16     ` Jeff King
2026-03-16 22:07 ` [PATCH] rev-parse: have --parseopt callers exit 0 on --help brian m. carlson
2026-03-17  0:47   ` Junio C Hamano
2026-03-17 11:59     ` brian m. carlson
2026-03-17 14:55       ` Jeff King
2026-03-17 15:07         ` Jeff King
2026-03-17 17:06         ` Junio C Hamano
2026-03-17 18:44           ` Jeff King
2026-03-18  0:24             ` brian m. carlson
2026-03-18  1:22               ` Jeff King
2026-03-18  2:45                 ` Junio C Hamano
2026-07-01 21:24   ` [PATCH v2 0/4] rev-parse: " brian m. carlson
2026-07-01 21:24     ` [PATCH v2 1/4] t1517: skip svn tests if svn is not installed brian m. carlson
2026-07-01 22:10       ` Junio C Hamano
2026-07-01 22:27       ` Junio C Hamano
2026-07-02 14:47         ` [PATCH v2 1/4] t1517: skip svn tests if svn is not installed2sy brian m. carlson
2026-07-02  5:37       ` [PATCH v2 1/4] t1517: skip svn tests if svn is not installed Jeff King
2026-07-03 20:36         ` Junio C Hamano
2026-07-04  4:47           ` Jeff King
2026-07-01 21:24     ` [PATCH v2 2/4] parse-options: add a separate case for help output on error brian m. carlson
2026-07-02  8:38       ` Jeff King [this message]
2026-07-01 21:24     ` [PATCH v2 3/4] rev-parse: have --parseopt callers exit 0 on --help brian m. carlson
2026-07-01 22:16       ` Junio C Hamano
2026-07-01 21:24     ` [PATCH v2 4/4] parse-options: exit 0 on -h brian m. carlson
2026-07-01 22:06     ` [PATCH v2 0/4] rev-parse: exit 0 on --help Junio C Hamano
2026-07-02  8:45       ` Jeff King
2026-07-03 20:38         ` Junio C Hamano

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=20260702083806.GA481298@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sandals@crustytoothpaste.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