[PATCH] parse-options.c: fix documentation syntax of optional arguments
- From
Michele Ballabio <barra_cuda@katamail.com>
- Date
- Jun 22, 2008, 14:39 UTC
- Message-ID
- <200806221639.04811.barra_cuda@katamail.com>
- In-Reply-To
- <20080622134550.GA5279@leksak.fem-net>
When an argument for an option is optional, short options don't need a space between the option and the argument, and long options need a "=". Otherwise, arguments are misinterpreted.
Signed-off-by: Michele Ballabio <barra_cuda@katamail.com> ---
On Sunday 22 June 2008, Stephan Beyer wrote:
Show 15 quoted lines
> > > +`OPT__ABBREV(&int_var)`:: > > > + Add `\--abbrev [<n>]`. > > > > better: > > + Add `\--abbrev[=<n>]`. > > > > since the <n> is optional. > > That's right and I also expected that print_usage_with_options() would > do so, since the other variant is ambiguous, BUT: > > $ ./test-parse-options -h 2>&1 | grep abbrev > --abbrev [<n>] use <n> digits to display SHA-1s > > And I didn't want to change parse-options.c ;-)
Here it is.
parse-options.c | 15 ++++++++++++--- t/t1502-rev-parse-parseopt.sh | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/parse-options.c b/parse-options.c index acf3fe3..f8d52e2 100644 --- a/parse-options.c +++ b/parse-options.c @@ -344,7 +344,10 @@ void usage_with_options_internal(const char * const *usagestr, break; case OPTION_INTEGER: if (opts->flags & PARSE_OPT_OPTARG) - pos += fprintf(stderr, "[<n>]"); + if (opts->long_name) + pos += fprintf(stderr, "[=<n>]"); + else + pos += fprintf(stderr, "[<n>]"); else pos += fprintf(stderr, " <n>"); break; @@ -355,12 +358,18 @@ void usage_with_options_internal(const char * const *usagestr, case OPTION_STRING: if (opts->argh) { if (opts->flags & PARSE_OPT_OPTARG) - pos += fprintf(stderr, " [<%s>]", opts->argh); + if (opts->long_name) + pos += fprintf(stderr, "[=<%s>]", opts->argh); + else + pos += fprintf(stderr, "[<%s>]", opts->argh); else pos += fprintf(stderr, " <%s>", opts->argh); } else { if (opts->flags & PARSE_OPT_OPTARG) - pos += fprintf(stderr, " [...]"); + if (opts->long_name) + pos += fprintf(stderr, "[=...]"); + else + pos += fprintf(stderr, "[...]"); else pos += fprintf(stderr, " ..."); } diff --git a/t/t1502-rev-parse-parseopt.sh b/t/t1502-rev-parse-parseopt.sh index d24a47d..3508d0a 100755 --- a/t/t1502-rev-parse-parseopt.sh +++ b/t/t1502-rev-parse-parseopt.sh @@ -13,7 +13,7 @@ usage: some-command [options] <args>... --bar ... some cool option --bar with an argument An option group Header - -C [...] option C with an optional argument + -C[...] option C with an optional argument Extras --extra1 line above used to cause a segfault but no longer does
-- 1.5.6