Merge branch 'sb/submodule-parallel-update'
A major part of "git submodule update" has been ported to C to take advantage of the recently added framework to run download tasks in parallel. * sb/submodule-parallel-update: clone: allow an explicit argument for parallel submodule clones submodule update: expose parallelism to the user submodule helper: remove double 'fatal: ' prefix git submodule update: have a dedicated helper for cloning run_processes_parallel: rename parameters for the callbacks run_processes_parallel: treat output of children as byte array submodule update: direct error message to stderr fetching submodules: respect `submodule.fetchJobs` config option submodule-config: drop check against NULL submodule-config: keep update strategy around
This commit is contained in:
@ -51,6 +51,7 @@ static enum transport_family family;
|
||||
static struct string_list option_config;
|
||||
static struct string_list option_reference;
|
||||
static int option_dissociate;
|
||||
static int max_jobs = -1;
|
||||
|
||||
static struct option builtin_clone_options[] = {
|
||||
OPT__VERBOSITY(&option_verbosity),
|
||||
@ -73,6 +74,8 @@ static struct option builtin_clone_options[] = {
|
||||
N_("initialize submodules in the clone")),
|
||||
OPT_BOOL(0, "recurse-submodules", &option_recursive,
|
||||
N_("initialize submodules in the clone")),
|
||||
OPT_INTEGER('j', "jobs", &max_jobs,
|
||||
N_("number of submodules cloned in parallel")),
|
||||
OPT_STRING(0, "template", &option_template, N_("template-directory"),
|
||||
N_("directory from which templates will be used")),
|
||||
OPT_STRING_LIST(0, "reference", &option_reference, N_("repo"),
|
||||
@ -100,10 +103,6 @@ static struct option builtin_clone_options[] = {
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
static const char *argv_submodule[] = {
|
||||
"submodule", "update", "--init", "--recursive", NULL
|
||||
};
|
||||
|
||||
static const char *get_repo_path_1(struct strbuf *path, int *is_bundle)
|
||||
{
|
||||
static char *suffix[] = { "/.git", "", ".git/.git", ".git" };
|
||||
@ -732,8 +731,16 @@ static int checkout(void)
|
||||
err |= run_hook_le(NULL, "post-checkout", sha1_to_hex(null_sha1),
|
||||
sha1_to_hex(sha1), "1", NULL);
|
||||
|
||||
if (!err && option_recursive)
|
||||
err = run_command_v_opt(argv_submodule, RUN_GIT_CMD);
|
||||
if (!err && option_recursive) {
|
||||
struct argv_array args = ARGV_ARRAY_INIT;
|
||||
argv_array_pushl(&args, "submodule", "update", "--init", "--recursive", NULL);
|
||||
|
||||
if (max_jobs != -1)
|
||||
argv_array_pushf(&args, "--jobs=%d", max_jobs);
|
||||
|
||||
err = run_command_v_opt(args.argv, RUN_GIT_CMD);
|
||||
argv_array_clear(&args);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user