From feef100e2149bb2e87ba4c7cb99b192eb0223ff8 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Tue, 4 Apr 2017 23:01:41 +0800 Subject: [PATCH] Update manager --- autoload/SpaceVim.vim | 3 ++ autoload/SpaceVim/api/job.vim | 2 +- autoload/SpaceVim/plugins/manager.vim | 55 +++++++++++++++++++++++++++ doc/SpaceVim.txt | 3 ++ 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/autoload/SpaceVim.vim b/autoload/SpaceVim.vim index 31985a8ab..c230c8c3b 100644 --- a/autoload/SpaceVim.vim +++ b/autoload/SpaceVim.vim @@ -194,6 +194,9 @@ let g:spacevim_filemanager = 'vimfiler' " Options are dein, neobundle, or vim-plug. let g:spacevim_plugin_manager = 'dein' "" +" Set the max process of SpaceVim plugin manager +let g:spacevim_plugin_manager_max_processes = 8 +"" " Enable/Disable checkinstall on SpaceVim startup. Default is 1. " > " let g:spacevim_checkinstall = 1 diff --git a/autoload/SpaceVim/api/job.vim b/autoload/SpaceVim/api/job.vim index d21092a38..dc98eba81 100644 --- a/autoload/SpaceVim/api/job.vim +++ b/autoload/SpaceVim/api/job.vim @@ -1,5 +1,5 @@ -function! SpaceVim#api#data#list#get() abort +function! SpaceVim#api#job#get() abort return map({'start' : '', \ 'stop' : '', \ 'send' : '', diff --git a/autoload/SpaceVim/plugins/manager.vim b/autoload/SpaceVim/plugins/manager.vim index b6aebd947..b73ca56ca 100644 --- a/autoload/SpaceVim/plugins/manager.vim +++ b/autoload/SpaceVim/plugins/manager.vim @@ -8,6 +8,14 @@ " Load SpaceVim api let s:VIM_CO = SpaceVim#api#import('vim#compatible') +let s:JOB = SpaceVim#api#import('job') +let s:LIST = SpaceVim#api#import('data#list') + + +" init values +let s:plugins = [] +let s:pulling_repos = {} + " install plugin manager function! s:install_manager() abort " Fsep && Psep @@ -92,3 +100,50 @@ function! s:need_cmd(cmd) abort return 0 endif endfunction + +" @vimlint(EVL102, 1, l:i) +function! SpaceVim#plugins#manager#update() abort + let s:plugins = keys(dein#get()) + for i in range(g:spacevim_plugin_manager_max_processes) + call s:pull(dein#get(s:LIST.shift(s:plugins))) + endfor +endfunction +" @vimlint(EVL102, 0, l:i) + +" here if a:data == 0, git pull succeed +function! s:on_pull_exit(id, data, event) abort + "echom a:id . string(a:data) . string(a:event) . string(s:pulling_repos) + if a:data == 0 + echom 'succeed to update ' . s:pulling_repos[a:id].name + else + echom 'failed to update ' . s:pulling_repos[a:id].name + endif + call s:msg_on_updated_done(s:pulling_repos[a:id].name) + call remove(s:pulling_repos, string(a:id)) + if !empty(s:plugins) + call s:pull(dein#get(s:LIST.shift(s:plugins))) + endif + if empty(s:pulling_repos) + echom 'SpaceVim update done' + endif + +endfunction + +function! s:pull(repo) abort + let argv = ['git', '-C', a:repo.path, 'pull'] + let jobid = s:JOB.start(argv,{ + \ 'on_exit' : function('s:on_pull_exit') + \ }) + if jobid != 0 + let s:pulling_repos[jobid] = a:repo + call s:msg_on_start(a:repo.name) + endif +endfunction + +function! s:msg_on_start(name) abort + " TODO update plugin manager ui +endfunction + +function! s:msg_on_updated_done(name) abort + " TODO update plugin manager ui +endfunction diff --git a/doc/SpaceVim.txt b/doc/SpaceVim.txt index 507519feb..d56d9c0ea 100644 --- a/doc/SpaceVim.txt +++ b/doc/SpaceVim.txt @@ -219,6 +219,9 @@ The default file manager of SpaceVim. Default is 'vimfiler'. The default plugin manager of SpaceVim. Default is 'dein'. Options are dein, neobundle, or vim-plug. + *g:spacevim_plugin_manager_max_processes* +Set the max process of SpaceVim plugin manager + *g:spacevim_checkinstall* Enable/Disable checkinstall on SpaceVim startup. Default is 1. >