From: Junio C Hamano <gitster@pobox.com>
To: Kevin Day <toasty@dragondata.com>
Cc: git@vger.kernel.org
Subject: Re: Commands using -h as an option don't work consistently
Date: Wed, 29 May 2024 15:22:09 -0700 [thread overview]
Message-ID: <xmqqfru0tg1a.fsf@gitster.g> (raw)
In-Reply-To: <52819526-4C6F-418C-8B8B-A4D5C7E371EA@dragondata.com> (Kevin Day's message of "Wed, 29 May 2024 17:03:04 -0500")
Kevin Day <toasty@dragondata.com> writes:
> Because of a bug in parse-options.c, any command that has a '-h' option will sometimes display the usage page instead of executing. For example, ls-remote has two options:
>
> -t, --[no-]tags limit to tags
> -h, --[no-]heads limit to heads
>
> git ls-remote --heads #works
> git ls-remote --tags #works
> git ls-remote -t #works
> git ls-remote -t -h #works
> git ls-remote -h #shows the help page
>
> This is because of these lines in parse-options.c:
>
> /* lone -h asks for help */
> if (internal_help && ctx->total == 1 && !strcmp(arg + 1, "h"))
> goto show_usage;
>
> This is being executed before it looks to see if there actually is a -h option.
This is very much deliberate design. I think in these cases we make
an unambiguous longhand (e.g. "--heads" we see above) available, or
you can explicitly say the remote, i.e. "git ls-remote -h origin",
and that has been the officially accepted "solution".
Let's see what improvements you bring to the table.
> The options I see:
>
> 1) Fix -h handling and add ignores and fixes where possible to the
> failing tests and try to not use -h as an option for anything new.
I do not quite understand the former half, but "try not to use -h
for new things" is a very good idea and it is pretty much what we
have been doing.
Note: There however is a scenario where we cannot avoid it---if
we were trying to match/mimick some established external
command, we may have to use the same "-h" as they use (e.g.,
"git grep -h -e ..." tries to mimick "grep -h -e ..."). Even in
that case, because "git grep -h" alone would not make any sense
without any pattern, the command behaves very sensibly, by the
way.
> 2) Change -h to -H or something, but this breaks backwards compatibility
As you said it yourself, this is a non starter.
> 3) Fix it so that -h works if a command uses it, and additionally
> make a new global option -? or --usage or something that always
> shows the usage page and change tests to use that, while leaving
> -h sometimes showing usage and sometimes executing the option to
> preserve as much backward compatibility as possible.
Reading this and then going back to the ls-remote examples you gave
earlier, I do not think the current behaviour is all that bad,
relative to what is being proposed, except for an explicit support
for "-?".
We can certainly add support for "-?", but the behaviour when "-?"
is not used (and when "-h" is used) would not have to change from
the current behaviour, and that would still be serviceable, I
presume?
We actually do not have to *add* support for "-?", as it comes with
parse-options for free ;-)
$ git ls-remote -\?
error: unknown switch '?'
usage: git ls-remote ...
... the same "ls-remote -h" output given here ...
So, I dunno.
next prev parent reply other threads:[~2024-05-29 22:22 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 22:03 Commands using -h as an option don't work consistently Kevin Day
2024-05-29 22:22 ` Junio C Hamano [this message]
2024-05-29 22:40 ` Kevin Day
2024-05-30 3:23 ` Junio C Hamano
2024-06-03 18:33 ` Junio C Hamano
2024-06-03 20:05 ` [PATCH 0/3] Branches are branches and not heads Junio C Hamano
2024-06-03 20:05 ` [PATCH 1/3] refs: call branches branches Junio C Hamano
2024-06-03 21:32 ` Eric Sunshine
2024-06-03 20:05 ` [PATCH 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-03 21:30 ` Rubén Justo
2024-06-03 21:42 ` Eric Sunshine
2024-06-03 21:48 ` Junio C Hamano
2024-06-03 20:05 ` [PATCH 3/3] show-ref: " Junio C Hamano
2024-06-03 21:32 ` [PATCH 0/3] Branches are branches and not heads Rubén Justo
2024-06-04 7:56 ` Patrick Steinhardt
2024-06-04 22:01 ` [PATCH v2 " Junio C Hamano
2024-06-04 22:01 ` [PATCH v2 1/3] refs: call branches branches Junio C Hamano
2024-06-04 22:01 ` [PATCH v2 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-06 9:39 ` Patrick Steinhardt
2024-06-06 15:18 ` Junio C Hamano
2024-06-04 22:01 ` [PATCH v2 3/3] show-ref: " Junio C Hamano
2024-06-14 19:32 ` Elijah Newren
2024-06-14 21:21 ` Junio C Hamano
2024-06-14 21:34 ` Elijah Newren
2024-06-14 21:42 ` Elijah Newren
2024-06-14 22:46 ` Junio C Hamano
2024-06-06 9:39 ` [PATCH v2 0/3] Branches are branches and not heads Patrick Steinhardt
-- strict thread matches above, loose matches on Subject: below --
2024-05-07 8:27 [RFC PATCH] docs: document upcoming breaking changes Patrick Steinhardt
2024-05-07 10:38 ` Johannes Schindelin
2024-05-08 13:55 ` Patrick Steinhardt
2024-05-07 22:02 ` Junio C Hamano
2024-05-08 13:54 ` Patrick Steinhardt
2024-05-08 14:58 ` Junio C Hamano
2024-05-08 15:59 ` Dragan Simic
2024-05-10 11:36 ` Patrick Steinhardt
2024-05-10 12:43 ` Dragan Simic
2024-05-08 13:15 ` Phillip Wood
2024-05-08 13:55 ` Patrick Steinhardt
2024-05-10 2:15 ` Justin Tobler
2024-05-10 4:47 ` Junio C Hamano
2024-05-14 6:50 ` Patrick Steinhardt
2024-05-14 6:16 ` [RFC PATCH v2] " Patrick Steinhardt
2024-05-14 10:48 ` Karthik Nayak
2024-05-14 11:22 ` Patrick Steinhardt
2024-05-14 15:45 ` Junio C Hamano
2024-05-14 12:32 ` Dragan Simic
2024-05-24 12:54 ` [PATCH v3] " Patrick Steinhardt
2024-05-24 17:27 ` Junio C Hamano
2024-05-30 12:04 ` Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 0/4] " Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-05-31 16:51 ` Junio C Hamano
2024-06-03 9:32 ` Patrick Steinhardt
2024-06-03 16:17 ` Junio C Hamano
2024-06-04 7:42 ` Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-05-31 17:00 ` Junio C Hamano
2024-05-31 7:56 ` [PATCH v4 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-05-31 7:56 ` [PATCH v4 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-05-31 17:05 ` Junio C Hamano
2024-05-31 23:35 ` Todd Zullinger
2024-05-31 8:43 ` [PATCH v4 0/4] docs: document upcoming breaking changes Junio C Hamano
2024-05-31 11:15 ` Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 " Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-03 14:08 ` Phillip Wood
2024-06-03 16:24 ` Junio C Hamano
2024-06-04 6:59 ` Patrick Steinhardt
2024-06-03 9:28 ` [PATCH v5 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-03 16:36 ` Junio C Hamano
2024-06-04 7:06 ` Patrick Steinhardt
2024-06-04 17:16 ` Junio C Hamano
2024-06-03 9:28 ` [PATCH v5 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-03 16:42 ` Junio C Hamano
2024-06-03 9:28 ` [PATCH v5 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-03 16:52 ` Junio C Hamano
2024-06-04 7:11 ` Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 0/4] docs: document upcoming breaking changes Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-04 17:59 ` Junio C Hamano
2024-06-05 5:31 ` Patrick Steinhardt
2024-06-05 16:03 ` Junio C Hamano
2024-06-05 17:52 ` Junio C Hamano
2024-06-06 4:35 ` Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-04 18:00 ` Junio C Hamano
2024-06-04 12:32 ` [PATCH v6 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-04 14:23 ` [PATCH v6 0/4] docs: document upcoming breaking changes Phillip Wood
2024-06-04 18:01 ` Junio C Hamano
2024-06-05 5:32 ` Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 " Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-14 16:08 ` Junio C Hamano
2024-06-14 6:42 ` [PATCH v7 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-14 6:42 ` [PATCH v7 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
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=xmqqfru0tg1a.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=toasty@dragondata.com \
/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.