Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > From: Glen Choo <chooglen@xxxxxxxxxx> > > 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@xxxxxxxxxx> > Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> > --- > 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 ;) > @@ -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 :).)