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

[PATCH 04/10] assert PARSE_OPT_NONEG in parse-options callbacks

From
Jeff King <peff@peff.net>
Date
Sep 30, 2020, 12:29 UTC
Message-ID
<20200930122902.GD1901279@coredump.intra.peff.net>
In-Reply-To
<20200930122732.GA1901036@coredump.intra.peff.net>

In the spirit of 517fe807d6 (assert NOARG/NONEG behavior of parse-options callbacks, 2018-11-05), let's cover some parse-options callbacks which expect to be used with PARSE_OPT_NONEG but don't explicitly assert that this is the case. These callbacks are all used correctly in the current code, but this will help document their expectations and future-proof the code.

As a bonus, it also silences -Wunused-parameters (these were added since the initial sweep of 517fe807d6, and we can't yet turn on -Wunused-parameters to remind people because it has too many existing false positives).

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/am.c           | 2 ++
 builtin/commit-graph.c | 2 ++
 builtin/env--helper.c  | 2 ++
 parse-options-cb.c     | 2 ++
 4 files changed, 8 insertions(+)
diff --git a/builtin/am.c b/builtin/am.c
index 7259186408..2c7673f74e 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -2180,6 +2180,8 @@ static int parse_opt_show_current_patch(const struct option *opt, const char *ar
 	};
 	int new_value = SHOW_PATCH_RAW;
 
+	BUG_ON_OPT_NEG(unset);
+
 	if (arg) {
 		for (new_value = 0; new_value < ARRAY_SIZE(valid_modes); new_value++) {
 			if (!strcmp(arg, valid_modes[new_value]))
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index 988445abdf..78fa08f43a 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -128,6 +128,8 @@ static int write_option_parse_split(const struct option *opt, const char *arg,
 {
 	enum commit_graph_split_flags *flags = opt->value;
 
+	BUG_ON_OPT_NEG(unset);
+
 	opts.split = 1;
 	if (!arg)
 		return 0;
diff --git a/builtin/env--helper.c b/builtin/env--helper.c
index 3aa4282114..27349098b0 100644
--- a/builtin/env--helper.c
+++ b/builtin/env--helper.c
@@ -17,6 +17,8 @@ static int option_parse_type(const struct option *opt, const char *arg,
 {
 	enum cmdmode *cmdmode = opt->value;
 
+	BUG_ON_OPT_NEG(unset);
+
 	if (!strcmp(arg, "bool"))
 		*cmdmode = ENV_HELPER_TYPE_BOOL;
 	else if (!strcmp(arg, "ulong"))
diff --git a/parse-options-cb.c b/parse-options-cb.c
index d9d3b0819f..4542d4d3f9 100644
--- a/parse-options-cb.c
+++ b/parse-options-cb.c
@@ -105,6 +105,8 @@ int parse_opt_commit(const struct option *opt, const char *arg, int unset)
 	struct commit *commit;
 	struct commit **target = opt->value;
 
+	BUG_ON_OPT_NEG(unset);
+
 	if (!arg)
 		return -1;
 	if (get_oid(arg, &oid))
-- 
2.28.0.1173.gad90222cf0
Previous: Jeff KingNext: Jeff King
Message 5 of 11 in “dropping more unused parameters”
  1. 0/10 dropping more unused parametersJeff King, Sep 30, 2020
  2. 01/10 convert: drop unused crlf_action from check_global_conv_flags_eol()Jeff King, Sep 30, 2020
  3. 02/10 drop unused argc parametersJeff King, Sep 30, 2020
  4. 03/10 env--helper: write to opt->value in parseopt helperJeff King, Sep 30, 2020
  5. 04/10 assert PARSE_OPT_NONEG in parse-options callbacksJeff King, Sep 30, 2020
  6. 05/10 push: drop unused repo argument to do_push()Jeff King, Sep 30, 2020
  7. 06/10 sequencer: drop repository argument from run_git_commit()Jeff King, Sep 30, 2020
  8. 07/10 sparse-checkout: fill in some options boilerplateJeff King, Sep 30, 2020
  9. 08/10 test-advise: check argument count with argc instead of argvJeff King, Sep 30, 2020
  10. 09/10 sequencer: handle ignore_footer when parsing trailersJeff King, Sep 30, 2020
  11. 10/10 dir.c: drop unused "untracked" from treat_path_fast()Jeff King, Sep 30, 2020

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.