submodule--helper update-clone: learn --init
Teach "git submodule--helper update-clone" the --init flag and remove the corresponding shell code. When the `--init` flag is passed to the subcommand, we do not spawn a new subprocess and call `submodule--helper init` on the submodule paths, because the Git machinery is not able to pick up the configuration changes introduced by that init call. So we instead run the `init_submodule_cb()` callback over each submodule in the same process. [1] https://lore.kernel.org/git/CAP8UFD0NCQ5w_3GtT_xHr35i7h8BuLX4UcHNY6VHPGREmDVObA@mail.gmail.com/ Signed-off-by: Glen Choo <chooglen@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									3ce52cba5b
								
							
						
					
					
						commit
						29a5e9e1ff
					
				|  | @ -2000,6 +2000,7 @@ struct submodule_update_clone { | |||
| 	int failed_clones_nr, failed_clones_alloc; | ||||
|  | ||||
| 	int max_jobs; | ||||
| 	unsigned int init; | ||||
| }; | ||||
| #define SUBMODULE_UPDATE_CLONE_INIT { \ | ||||
| 	.list = MODULE_LIST_INIT, \ | ||||
|  | @ -2509,6 +2510,8 @@ static int update_clone(int argc, const char **argv, const char *prefix) | |||
| 	int ret; | ||||
|  | ||||
| 	struct option module_update_clone_options[] = { | ||||
| 		OPT_BOOL(0, "init", &suc.init, | ||||
| 			 N_("initialize uninitialized submodules before update")), | ||||
| 		OPT_STRING(0, "prefix", &prefix, | ||||
| 			   N_("path"), | ||||
| 			   N_("path into the working tree")), | ||||
|  | @ -2567,6 +2570,29 @@ static int update_clone(int argc, const char **argv, const char *prefix) | |||
| 	if (pathspec.nr) | ||||
| 		suc.warn_if_uninitialized = 1; | ||||
|  | ||||
| 	if (suc.init) { | ||||
| 		struct module_list list = MODULE_LIST_INIT; | ||||
| 		struct init_cb info = INIT_CB_INIT; | ||||
|  | ||||
| 		if (module_list_compute(argc, argv, suc.prefix, | ||||
| 					&pathspec, &list) < 0) | ||||
| 			return 1; | ||||
|  | ||||
| 		/* | ||||
| 		 * If there are no path args and submodule.active is set then, | ||||
| 		 * by default, only initialize 'active' modules. | ||||
| 		 */ | ||||
| 		if (!argc && git_config_get_value_multi("submodule.active")) | ||||
| 			module_list_active(&list); | ||||
|  | ||||
| 		info.prefix = suc.prefix; | ||||
| 		info.superprefix = suc.recursive_prefix; | ||||
| 		if (suc.quiet) | ||||
| 			info.flags |= OPT_QUIET; | ||||
|  | ||||
| 		for_each_listed_submodule(&list, init_submodule_cb, &info); | ||||
| 	} | ||||
|  | ||||
| 	ret = update_submodules(&suc); | ||||
| 	list_objects_filter_release(&filter_options); | ||||
| 	return ret; | ||||
|  |  | |||
|  | @ -361,14 +361,11 @@ cmd_update() | |||
| 		usage | ||||
| 	fi | ||||
|  | ||||
| 	if test -n "$init" | ||||
| 	then | ||||
| 		cmd_init "--" "$@" || return | ||||
| 	fi | ||||
|  | ||||
| 	{ | ||||
| 	git submodule--helper update-clone ${GIT_QUIET:+--quiet} \ | ||||
| 	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper update-clone \ | ||||
| 		${GIT_QUIET:+--quiet} \ | ||||
| 		${progress:+"--progress"} \ | ||||
| 		${init:+--init} \ | ||||
| 		${wt_prefix:+--prefix "$wt_prefix"} \ | ||||
| 		${prefix:+--recursive-prefix "$prefix"} \ | ||||
| 		${update:+--update "$update"} \ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Glen Choo
						Glen Choo