git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] parse-options: disallow negating OPTION_SET_INT 0
@ 2023-08-08 20:05 René Scharfe
  2023-08-08 23:52 ` Junio C Hamano
  0 siblings, 1 reply; 2+ messages in thread
From: René Scharfe @ 2023-08-08 20:05 UTC (permalink / raw)
  To: Git List

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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] parse-options: disallow negating OPTION_SET_INT 0
  2023-08-08 20:05 [PATCH] parse-options: disallow negating OPTION_SET_INT 0 René Scharfe
@ 2023-08-08 23:52 ` Junio C Hamano
  0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2023-08-08 23:52 UTC (permalink / raw)
  To: René Scharfe; +Cc: Git List

René Scharfe <l.s.r@web.de> writes:

> 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.

That does make quite a lot of sense, and parse_options_check() is
the perfect place to do so.

Thanks.

> 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-08-08 23:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-08 20:05 [PATCH] parse-options: disallow negating OPTION_SET_INT 0 René Scharfe
2023-08-08 23:52 ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).