mirror of
https://github.com/git/git.git
synced 2024-11-23 09:56:28 +08:00
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>
This commit is contained in:
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
Block a user