parse-options: show negatability of options in short help

Add a "[no-]" prefix to options without the flag PARSE_OPT_NONEG to
document the fact that you can negate them.

This looks a bit strange for options that already start with "no-", e.g.
for the option --no-name of git show-branch:

    --[no-]no-name        suppress naming strings

You can actually use --no-no-name as an alias of --name, so the short
help is not wrong.  If we strip off any of the "no-"s, we lose either
the ability to see if the remaining one belongs to the documented
variant or to see if it can be negated.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe
2023-08-05 16:40:59 +02:00
committed by Junio C Hamano
parent d5dc68f730
commit e8e5d294dc
7 changed files with 58 additions and 45 deletions

View File

@@ -3,8 +3,8 @@ usage: some-command [options] <args>...
some-command does foo and bar!
--foo can be negated
--no-bar can be positivated
--[no-]foo can be negated
--[no-]no-bar can be positivated
--positive-only cannot be negated
--no-negative cannot be positivated

View File

@@ -4,31 +4,33 @@ usage: some-command [options] <args>...
some-command does foo and bar!
-h, --help show the help
--foo some nifty option --foo
--bar ... some cool option --bar with an argument
-b, --baz a short and long option
--[no-]foo some nifty option --foo
--[no-]bar ... some cool option --bar with an argument
-b, --[no-]baz a short and long option
An option group Header
-C[...] option C with an optional argument
-d, --data[=...] short and long option with an optional argument
-d, --[no-]data[=...] short and long option with an optional argument
Argument hints
-B <arg> short option required argument
--bar2 <arg> long option required argument
-e, --fuz <with-space>
--[no-]bar2 <arg> long option required argument
-e, --[no-]fuz <with-space>
short and long option required argument
-s[<some>] short option optional argument
--long[=<data>] long option optional argument
-g, --fluf[=<path>] short and long option optional argument
--longest <very-long-argument-hint>
--[no-]long[=<data>] long option optional argument
-g, --[no-]fluf[=<path>]
short and long option optional argument
--[no-]longest <very-long-argument-hint>
a very long argument hint
--pair <key=value> with an equals sign in the hint
--aswitch help te=t contains? fl*g characters!`
--bswitch <hint> hint has trailing tab character
--cswitch switch has trailing tab character
--short-hint <a> with a one symbol hint
--[no-]pair <key=value>
with an equals sign in the hint
--[no-]aswitch help te=t contains? fl*g characters!`
--[no-]bswitch <hint> hint has trailing tab character
--[no-]cswitch switch has trailing tab character
--[no-]short-hint <a> with a one symbol hint
Extras
--extra1 line above used to cause a segfault but no longer does
--[no-]extra1 line above used to cause a segfault but no longer does
EOF