Re: [PATCH v2 10/12] submodule--helper: eliminate internal "--update" option
- From
Glen Choo <chooglen@google.com>
- Date
- Jun 15, 2022, 16:52 UTC
- Message-ID
- <kl6l8rpx6f9q.fsf@chooglen-macbookpro.roam.corp.google.com>
- In-Reply-To
- <patch-v2-10.12-ac00a9599de-20220613T220150Z-avarab@gmail.com>
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
Show 85 quoted lines
> From: Glen Choo <chooglen@google.com>
>
> Follow-up on the preceding commit which taught "git submodule--helper
> update" to understand "--merge", "--checkout" and "--rebase" and use
> those options instead of "--update=(rebase|merge|checkout|none)" when
> the command invokes itself.
>
> Unlike the preceding change this isn't strictly necessary to
> eventually change "git-submodule.sh" so that it invokes "git
> submodule--helper update" directly, but let's remove this
> inconsistency in the command-line interface. We shouldn't need to
> carry special synonyms for existing options in "git submodule--helper"
> when that command can use the primary documented names instead.
>
> But, as seen in the post-image this makes the control flow within
> "builtin/submodule--helper.c" simpler, we can now write directly to
> the "update_default" member of "struct update_data" when parsing the
> options in "module_update()".
>
> Signed-off-by: Glen Choo <chooglen@google.com>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
> builtin/submodule--helper.c | 42 ++++++++++++++++---------------------
> 1 file changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> index 57f0237af23..65cf4b915df 100644
> --- a/builtin/submodule--helper.c
> +++ b/builtin/submodule--helper.c
> @@ -1818,7 +1818,7 @@ static int module_clone(int argc, const char **argv, const char *prefix)
> static void determine_submodule_update_strategy(struct repository *r,
> int just_cloned,
> const char *path,
> - const char *update,
> + enum submodule_update_type update,
> struct submodule_update_strategy *out)
> {
> const struct submodule *sub = submodule_from_path(r, null_oid(), path);
> @@ -1828,9 +1828,7 @@ static void determine_submodule_update_strategy(struct repository *r,
> key = xstrfmt("submodule.%s.update", sub->name);
>
> if (update) {
> - if (parse_submodule_update_strategy(update, out) < 0)
> - die(_("Invalid update mode '%s' for submodule path '%s'"),
> - update, path);
> + out->type = update;
> } else if (!repo_config_get_string_tmp(r, key, &val)) {
> if (parse_submodule_update_strategy(val, out) < 0)
> die(_("Invalid update mode '%s' configured for submodule path '%s'"),
> @@ -1882,7 +1880,7 @@ struct update_data {
> const char *prefix;
> const char *recursive_prefix;
> const char *displaypath;
> - const char *update_default;
> + enum submodule_update_type update_default;
> struct object_id suboid;
> struct string_list references;
> struct submodule_update_strategy update_strategy;
> @@ -2406,6 +2404,8 @@ static void ensure_core_worktree(const char *path)
>
> static void update_data_to_args(struct update_data *update_data, struct strvec *args)
> {
> + enum submodule_update_type ud = update_data->update_default;
> +
> strvec_pushl(args, "submodule--helper", "update", "--recursive", NULL);
> strvec_pushf(args, "--jobs=%d", update_data->max_jobs);
> if (update_data->recursive_prefix)
> @@ -2429,8 +2429,15 @@ static void update_data_to_args(struct update_data *update_data, struct strvec *
> strvec_push(args, "--require-init");
> if (update_data->depth)
> strvec_pushf(args, "--depth=%d", update_data->depth);
> - if (update_data->update_default)
> - strvec_pushl(args, "--update", update_data->update_default, NULL);
> + if (ud == SM_UPDATE_MERGE)
> + strvec_push(args, "--merge");
> + else if (ud == SM_UPDATE_CHECKOUT)
> + strvec_push(args, "--checkout");
> + else if (ud == SM_UPDATE_REBASE)
> + strvec_push(args, "--rebase");
> + else if (ud != SM_UPDATE_UNSPECIFIED)
> + BUG("cannot convert update_default=%d to args", ud);
> +
> if (update_data->references.nr) {
> struct string_list_item *item;
> for_each_string_list_item(item, &update_data->references)Everything up to here looks familiar ;)
Show 44 quoted lines
> @@ -2582,7 +2589,6 @@ static int module_update(int argc, const char **argv, const char *prefix)
> struct update_data opt = UPDATE_DATA_INIT;
> struct list_objects_filter_options filter_options;
> int ret;
> - enum submodule_update_type update_type = SM_UPDATE_UNSPECIFIED;
>
> struct option module_update_options[] = {
> OPT__FORCE(&opt.force, N_("force checkout updates"), 0),
> @@ -2601,16 +2607,13 @@ static int module_update(int argc, const char **argv, const char *prefix)
> N_("path"),
> N_("path into the working tree, across nested "
> "submodule boundaries")),
> - OPT_STRING(0, "update", &opt.update_default,
> - N_("string"),
> - N_("rebase, merge, checkout or none")),
> - OPT_SET_INT(0, "checkout", &update_type,
> + OPT_SET_INT(0, "checkout", &opt.update_default,
> N_("use the 'checkout' update strategy (default)"),
> SM_UPDATE_CHECKOUT),
> - OPT_SET_INT('m', "merge", &update_type,
> + OPT_SET_INT('m', "merge", &opt.update_default,
> N_("use the 'merge' update strategy"),
> SM_UPDATE_MERGE),
> - OPT_SET_INT('r', "rebase", &update_type,
> + OPT_SET_INT('r', "rebase", &opt.update_default,
> N_("use the 'rebase' update strategy"),
> SM_UPDATE_REBASE),
> OPT_STRING_LIST(0, "reference", &opt.references, N_("repo"),
> @@ -2662,17 +2665,8 @@ static int module_update(int argc, const char **argv, const char *prefix)
>
> opt.filter_options = &filter_options;
>
> - if (update_type == SM_UPDATE_CHECKOUT)
> - opt.update_default = "checkout";
> - else if (update_type == SM_UPDATE_MERGE)
> - opt.update_default = "merge";
> - else if (update_type == SM_UPDATE_REBASE)
> - opt.update_default = "rebase";
> -
> if (opt.update_default)
> - if (parse_submodule_update_strategy(opt.update_default,
> - &opt.update_strategy) < 0)
> - die(_("bad value for update parameter"));
> + opt.update_strategy.type = opt.update_default;Here we're undoing the changes in the previous patch. I guess there's a readability benefit to having them separate, but I think both patches are simple enough that we can combine into one (with you as the author :).)