Re: [PATCH v2 10/12] submodule--helper: eliminate internal "--update" option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Æ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
:).)




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux