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

[PATCH] parse-options: disallow negating OPTION_SET_INT 0

From
René Scharfe <l.s.r@web.de>
Date
Aug 8, 2023, 20:05 UTC
Message-ID
<c4cd1591-3a83-920a-6a80-19ffbfe3089d@web.de>

An option of type OPTION_SET_INT can be defined to set its variable to zero. It's negated variant will do the same, though, which is confusing. Several such options were fixed by disabling negation, changing the value to set or using a different option type:

991c552916 (ls-tree: fix --no-full-name, 2023-07-18) e12cb98e1e (branch: reject "--no-all" and "--no-remotes" early, 2023-07-18) 68cbb20e73 (show-branch: reject --[no-](topo|date)-order, 2023-07-19) 3821eb6c3d (reset: reject --no-(mixed|soft|hard|merge|keep) option, 2023-07-19) 36f76d2a25 (pack-objects: fix --no-quiet, 2023-07-21) 3a5f308741 (pack-objects: fix --no-keep-true-parents, 2023-07-21) c95ae3ff9c (describe: fix --no-exact-match, 2023-07-21) d089a06421 (bundle: use OPT_PASSTHRU_ARGV, 2023-07-29)

Check for such options that allow negation in parse_options_check() and report them to find future cases quicker.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 parse-options.c | 3 +++
 1 file changed, 3 insertions(+)
diff --git a/parse-options.c b/parse-options.c
index 87c9fae634..60224cf8d0 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -480,6 +480,9 @@ static void parse_options_check(const struct option *opts)
 		     opts->long_name))
 			optbug(opts, "uses feature "
 			       "not supported for dashless options");
+		if (opts->type == OPTION_SET_INT && !opts->defval &&
+		    opts->long_name && !(opts->flags & PARSE_OPT_NONEG))
+			optbug(opts, "OPTION_SET_INT 0 should not be negatable");
 		switch (opts->type) {
 		case OPTION_COUNTUP:
 		case OPTION_BIT:
--
2.41.0
Next: Junio C Hamano
Message 1 of 2 in “parse-options: disallow negating OPTION_SET_INT 0”
  1. parse-options: disallow negating OPTION_SET_INT 0René Scharfe, Aug 8, 2023
  2. Junio C HamanoAug 8, 2023

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.