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

[PATCH 03/10 v2] parse-options: move NODASH sanity checks to parse_options_check

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Dec 2, 2010, 06:05 UTC
Message-ID
<20101202060505.GC32125@burratino>
In-Reply-To
<20101201232950.GD31815@burratino>

A dashless switch (like '(' passed to 'git grep') cannot be negated, cannot be attached to an argument, and cannot have a long form. Currently parse-options runs the related sanity checks when the dashless option is used; better to always check them at the start of option parsing, so mistakes can be caught more quickly.

The error message at the new call site is less specific about the nature of the error, for simplicity. On the other hand, it prints which switch was problematic. Before:

	fatal: BUG: dashless options can't be long
After:
	error: BUG: switch '(' uses feature not supported for dashless options
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Change since v1:
 - rebase on top of patch 2 v2.
 parse-options.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/parse-options.c b/parse-options.c
index 97d7ff7..9f6d305 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -288,13 +288,6 @@ static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg,
 	for (; options->type != OPTION_END; options++) {
 		if (!(options->flags & PARSE_OPT_NODASH))
 			continue;
-		if ((options->flags & PARSE_OPT_OPTARG) ||
-		    !(options->flags & PARSE_OPT_NOARG))
-			die("BUG: dashless options don't support arguments");
-		if (!(options->flags & PARSE_OPT_NONEG))
-			die("BUG: dashless options don't support negation");
-		if (options->long_name)
-			die("BUG: dashless options can't be long");
 		if (options->short_name == arg[0] && arg[1] == '\0')
 			return get_value(p, options, OPT_SHORT);
 	}
@@ -330,6 +323,13 @@ static void parse_options_check(const struct option *opts)
 		    (opts->flags & PARSE_OPT_OPTARG))
 			err |= optbug(opts, "uses incompatible flags "
 					"LASTARG_DEFAULT and OPTARG");
+		if (opts->flags & PARSE_OPT_NODASH &&
+		    ((opts->flags & PARSE_OPT_OPTARG) ||
+		     !(opts->flags & PARSE_OPT_NOARG) ||
+		     !(opts->flags & PARSE_OPT_NONEG) ||
+		     opts->long_name))
+			err |= optbug(opts, "uses feature "
+					"not supported for dashless options");
 	}
 	if (err)
 		exit(128);
-- 
1.7.2.3
Previous: Jonathan NiederNext: Jonathan Nieder
Message 10 of 21 in “update-index: migrate to parse-options API”
  1. 00/10 update-index: migrate to parse-options APIJonathan Nieder, Dec 1, 2010
  2. 01/10 parse-options: Don't call parse_options_check() so muchJonathan Nieder, Dec 1, 2010
  3. René ScharfeDec 5, 2010
  4. Stephen BoydDec 6, 2010
  5. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 1, 2010
  6. Jonathan NiederDec 2, 2010
  7. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 2, 2010
  8. 02/10 parse-options: clearer reporting of API misuseJonathan Nieder, Dec 2, 2010
  9. 03/10 parse-options: move NODASH sanity checks to parse_options_checkJonathan Nieder, Dec 1, 2010
  10. 03/10 parse-options: move NODASH sanity checks to parse_options_checkJonathan Nieder, Dec 2, 2010
  11. 04/10 parse-options: sanity check PARSE_OPT_NOARG flagJonathan Nieder, Dec 1, 2010
  12. 04/10 parse-options: sanity check PARSE_OPT_NOARG flagJonathan Nieder, Dec 2, 2010
  13. 05/10 parse-options: do not infer PARSE_OPT_NOARG from option typeJonathan Nieder, Dec 1, 2010
  14. 06/10 parse-options: never suppress arghelp if LITERAL_ARGHELP is setJonathan Nieder, Dec 1, 2010
  15. Stephen BoydDec 3, 2010
  16. Jonathan NiederDec 3, 2010
  17. Stephen BoydDec 3, 2010
  18. 07/10 parse-options: allow git commands to invent new option typesJonathan Nieder, Dec 1, 2010
  19. 08/10 parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTIONJonathan Nieder, Dec 1, 2010
  20. 09/10 setup: save prefix (original cwd relative to toplevel) in startup_infoJonathan Nieder, Dec 1, 2010
  21. 10/10 update-index: migrate to parse-options APIJonathan Nieder, Dec 1, 2010

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.