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

Re: 'git branch --no-merge' is ambiguous

From
Andreas Schwab <schwab@linux-m68k.org>
Date
Sep 25, 2009, 18:44 UTC
Message-ID
<m2ljk250f7.fsf@igel.home>
In-Reply-To
<4ABC9B69.5010205@viscovery.net>
Johannes Sixt <j.sixt@viscovery.net> writes:
Show 12 quoted lines
> Look here:
>
>  $ git branch --merge
>  * master
>  $ git branch --no-merge
>  error: Ambiguous option: no-merge (could be --no-merged or --no-merged)
>  usage: ...
>      --no-merged <commit>  print only not merged branches
>      --merged <commit>     print only merged branches
>
> I tried to debug it, but parse_long_opt() is such awful spaghetti code
> that I don't grok it. Please help.

parse_long_opt always matches both --opt and --no-opt for any option "opt", and only get_value checks whether --no-opt is actually valid. Since the options for git branch contains both "no-merged" and "merged" there are two matches for --no-merge, but no exact match. With this patch the negation of a NONEG option is rejected earlier, but it changes the error message from "option `no-opt' isn't available" to "unknown option `no-opt'".

diff --git a/parse-options.c b/parse-options.c
index a64a4d6..f559411 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -230,6 +230,9 @@ is_abbreviated:
 				abbrev_flags = flags;
 				continue;
 			}
+			/* negation allowed? */
+			if (options->flags & PARSE_OPT_NONEG)
+				continue;
 			/* negated and abbreviated very much? */
 			if (!prefixcmp("no-", arg)) {
 				flags |= OPT_UNSET;

Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Previous: Johannes SixtNext: Jeff King
Message 2 of 4 in “'git branch --no-merge' is ambiguous”
  1. Johannes SixtSep 25, 2009
  2. Andreas SchwabSep 25, 2009
  3. Jeff KingSep 27, 2009
  4. Andreas SchwabSep 27, 2009

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.