зеркало из https://github.com/microsoft/git.git
clone: allow an explicit argument for parallel submodule clones
Just pass it along to "git submodule update", which may pick reasonable defaults if you don't specify an explicit number. Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
2335b870fa
Коммит
72290d6a1d
|
@ -14,7 +14,7 @@ SYNOPSIS
|
|||
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
|
||||
[--dissociate] [--separate-git-dir <git dir>]
|
||||
[--depth <depth>] [--[no-]single-branch]
|
||||
[--recursive | --recurse-submodules] [--] <repository>
|
||||
[--recursive | --recurse-submodules] [--jobs <n>] [--] <repository>
|
||||
[<directory>]
|
||||
|
||||
DESCRIPTION
|
||||
|
@ -221,6 +221,10 @@ objects from the source repository into a pack in the cloned repository.
|
|||
The result is Git repository can be separated from working
|
||||
tree.
|
||||
|
||||
-j <n>::
|
||||
--jobs <n>::
|
||||
The number of submodules fetched at the same time.
|
||||
Defaults to the `submodule.fetchJobs` option.
|
||||
|
||||
<repository>::
|
||||
The (possibly remote) repository to clone from. See the
|
||||
|
|
|
@ -50,6 +50,7 @@ static int option_progress = -1;
|
|||
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),
|
||||
|
@ -72,6 +73,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"),
|
||||
|
@ -95,10 +98,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" };
|
||||
|
@ -724,8 +723,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;
|
||||
}
|
||||
|
|
|
@ -786,4 +786,19 @@ test_expect_success 'submodule update can be run in parallel' '
|
|||
grep "9 tasks" trace.out
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'git clone passes the parallel jobs config on to submodules' '
|
||||
test_when_finished "rm -rf super4" &&
|
||||
GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 7 . super4 &&
|
||||
grep "7 tasks" trace.out &&
|
||||
rm -rf super4 &&
|
||||
git config --global submodule.fetchJobs 8 &&
|
||||
GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules . super4 &&
|
||||
grep "8 tasks" trace.out &&
|
||||
rm -rf super4 &&
|
||||
GIT_TRACE=$(pwd)/trace.out git clone --recurse-submodules --jobs 9 . super4 &&
|
||||
grep "9 tasks" trace.out &&
|
||||
rm -rf super4
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче