Am 03.09.2014 um 21:42 schrieb Junio C Hamano:
> Junio C Hamano <gits...@pobox.com> writes:
> 
>>> diff --git a/builtin/revert.c b/builtin/revert.c
>>> index f9ed5bd..831c2cd 100644
>>> --- a/builtin/revert.c
>>> +++ b/builtin/revert.c
>>> @@ -91,6 +91,7 @@ static void parse_args(int argc, const char **argv, 
>>> struct replay_opts *opts)
>>>                     N_("option for merge strategy"), option_parse_x),
>>>             { OPTION_STRING, 'S', "gpg-sign", &opts->gpg_sign, N_("key-id"),
>>>               N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" 
>>> },
>>> +           OPT_BOOL('n', "no-verify", &opts->no_verify, N_("bypass 
>>> pre-commit hook")),
>>
>> I doubt we want this option to squat on '-n'; besides, it is already
>> taken by a more often used "--no-commit".
>>
>> I thought that we added sanity checker for the options[] array to 
>> parse-options
>> API.  I wonder why it did not kick in...
> 
> ... because we didn't, not quite.
> 
> Perhaps like this?
> 
> -- >8 --
> It is easy to overlook an already assigned single-letter option name
> and try to use it for a new one.  Help the developer to catch it
> before such a mistake escapes the lab.
> 
> Signed-off-by: Junio C Hamano <gits...@pobox.com>
> ---
> diff --git a/parse-options.c b/parse-options.c
> index e7dafa8..b7925c5 100644
> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -347,12 +347,17 @@ static void check_typos(const char *arg, const struct 
> option *options)
>   static void parse_options_check(const struct option *opts)
>   {
>       int err = 0;
> +     char short_opts[128];
> +
> +     memset(short_opts, '\0', sizeof(short_opts));
>   
>       for (; opts->type != OPTION_END; opts++) {
>               if ((opts->flags & PARSE_OPT_LASTARG_DEFAULT) &&
>                   (opts->flags & PARSE_OPT_OPTARG))
>                       err |= optbug(opts, "uses incompatible flags "
>                                       "LASTARG_DEFAULT and OPTARG");
> +             if (opts->short_name && short_opts[opts->short_name]++)
> +                     err |= optbug(opts, "short name already used");
>               if (opts->flags & PARSE_OPT_NODASH &&
>                   ((opts->flags & PARSE_OPT_OPTARG) ||
>                    !(opts->flags & PARSE_OPT_NOARG) ||
> 

Compact and useful, I like it.

You might want to squash in something like this, though.  Without it
t1502 fails because -b is defined twice there.

---
 t/t1502-rev-parse-parseopt.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/t/t1502-rev-parse-parseopt.sh b/t/t1502-rev-parse-parseopt.sh
index 922423e..ebe7c3b 100755
--- a/t/t1502-rev-parse-parseopt.sh
+++ b/t/t1502-rev-parse-parseopt.sh
@@ -19,7 +19,7 @@ sed -e 's/^|//' >expect <<\END_EXPECT
 |    -d, --data[=...]      short and long option with an optional argument
 |
 |Argument hints
-|    -b <arg>              short option required argument
+|    -B <arg>              short option required argument
 |    --bar2 <arg>          long option required argument
 |    -e, --fuz <with-space>
 |                          short and long option required argument
@@ -51,7 +51,7 @@ sed -e 's/^|//' >optionspec <<\EOF
 |d,data?   short and long option with an optional argument
 |
 | Argument hints
-|b=arg     short option required argument
+|B=arg     short option required argument
 |bar2=arg  long option required argument
 |e,fuz=with-space  short and long option required argument
 |s?some    short option optional argument
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to