Re: [PATCH 6/8] builtin/config: introduce subcommands
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Mar 6, 2024, 21:38 UTC
- Message-ID
- <CAOLa=ZSg35atoTsBVtWj_j94n2Mt8otzfw3DYLYS9FCbNgp_Xg@mail.gmail.com>
- In-Reply-To
- <f79c0f94e415de5c1c7b4120af5270fe4900d825.1709724089.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 18 quoted lines
> @@ -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.