git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] parse-options: detect attempt to add a duplicate short option name

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 3, 2014, 19:42 UTC
Message-ID
<xmqq1trsxzgy.fsf_-_@gitster.dls.corp.google.com>
In-Reply-To
<xmqq7g1kxzxi.fsf@gitster.dls.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 15 quoted lines
>> 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 <gitster@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) ||
Previous: Junio C HamanoNext: René Scharfe
Message 6 of 20 in “Teach revert/cherry-pick the --no-verify option”
  1. 0/3 Teach revert/cherry-pick the --no-verify optionJohan Herland, Sep 3, 2014
  2. 1/3 t7503/4: Add failing testcases for revert/cherry-pick --no-verifyJohan Herland, Sep 3, 2014
  3. Junio C HamanoSep 3, 2014
  4. 2/3 revert/cherry-pick: Add --no-verify option, and pass it on to commitJohan Herland, Sep 3, 2014
  5. Junio C HamanoSep 3, 2014
  6. parse-options: detect attempt to add a duplicate short option nameJunio C Hamano, Sep 3, 2014
  7. René ScharfeSep 3, 2014
  8. Junio C HamanoSep 3, 2014
  9. René ScharfeSep 3, 2014
  10. Junio C HamanoSep 3, 2014
  11. René ScharfeSep 4, 2014
  12. Junio C HamanoSep 4, 2014
  13. Junio C HamanoSep 4, 2014
  14. Jonathan NiederSep 3, 2014
  15. Jonathan NiederSep 3, 2014
  16. Johan HerlandSep 4, 2014
  17. 3/3 revert/cherry-pick --no-verify: Update documentationJohan Herland, Sep 3, 2014
  18. Junio C HamanoSep 3, 2014
  19. Fabian RuchSep 5, 2014
  20. Johan HerlandSep 8, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.