Thread (97 messages) 97 messages, 9 authors, 2025-08-03

Re: [PATCH 6/8] builtin/config: introduce subcommands

From: Karthik Nayak <hidden>
Date: 2024-03-06 21:38:27

Patrick Steinhardt [off-list ref] writes:
quoted hunk ↗ jump to hunk
@@ -910,6 +930,20 @@ int cmd_config(int argc, const char **argv, const char *prefix)
 {
 	given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT));

+	/*
+	 * This is somewhat hacky: we first parse the command line while
+	 * keeping all args intact in order to determine whether a subcommand
+	 * has been specified. If so, we re-parse it a second time, but this
+	 * time we drop KEEP_ARGV0. This is so that we don't munge the command
+	 * line in case no subcommand was given, which would otherwise confuse
+	 * us when parsing the implicit modes.
+	 */
+	argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage,
+			     PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_ARGV0|PARSE_OPT_KEEP_UNKNOWN_OPT);
+	if (subcommand)
+		argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage,
+				     PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_UNKNOWN_OPT);
+
I wonder if we can drop the PARSE_OPT_SUBCOMMAND_OPTIONAL in the second
iteration to make it stricter. But this is OK.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help