From 8ed2617ba088cadcc4c87c9fa1007b4633b06442 Mon Sep 17 00:00:00 2001 From: "Samuel D. Leslie" Date: Thu, 6 Sep 2018 15:48:54 +1000 Subject: [PATCH] Add support for parallel fetching of Git submodules (#784) Git v2.8 introduced support for parallel fetching of submodules. This can result in a substantial performance boost when performing a "git submodule update" in a repository with many submodules, potentially further magnified when updating submodules recursively. This commit introduces a check on the Git version to see if it supports parallel submodule fetching. If it does, we add the '--jobs=N' argument to our call to "git submodule update", where N is g:plug_threads or the vim-plug default of 16. --- plug.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plug.vim b/plug.vim index 5d2b00e..686dd47 100644 --- a/plug.vim +++ b/plug.vim @@ -1011,6 +1011,8 @@ function! s:update_impl(pull, force, args) abort let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' endif + let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' + " Python version requirement (>= 2.7) if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 redir => pyv @@ -1102,7 +1104,7 @@ function! s:update_finish() if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) call s:log4(name, 'Updating submodules. This may take a while.') - let out .= s:bang('git submodule update --init --recursive 2>&1', spec.dir) + let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) endif let msg = s:format_message(v:shell_error ? 'x': '-', name, out) if v:shell_error