PlugClean!

This commit is contained in:
Junegunn Choi 2013-09-17 22:57:13 +09:00
parent a39753b7ac
commit 443fbd3699

View File

@ -77,7 +77,7 @@ function! plug#begin(...)
command! -nargs=+ Plug call s:add(<args>) command! -nargs=+ Plug call s:add(<args>)
command! -nargs=* PlugInstall call s:install(<f-args>) command! -nargs=* PlugInstall call s:install(<f-args>)
command! -nargs=* PlugUpdate call s:update(<f-args>) command! -nargs=* PlugUpdate call s:update(<f-args>)
command! -nargs=0 PlugClean call s:clean() command! -nargs=0 -bang PlugClean call s:clean('<bang>' == '!')
command! -nargs=0 PlugUpgrade if s:upgrade() | execute "source ". s:me | endif command! -nargs=0 PlugUpgrade if s:upgrade() | execute "source ". s:me | endif
endfunction endfunction
@ -264,7 +264,7 @@ function! s:update_serial(pull)
let result = '(x) ' . result let result = '(x) ' . result
endif endif
call setline(1, "Updating plugins (".cnt."/".total.")") call setline(1, "Updating plugins (".cnt."/".total.")")
call setline(2, '[' . s:lpad(repeat('=', cnt), total) . ']') call s:progress_bar(2, cnt, total)
call append(line('$'), '- ' . name . ': ' . result) call append(line('$'), '- ' . name . ': ' . result)
normal! 2G normal! 2G
redraw redraw
@ -338,19 +338,37 @@ function! s:glob_dir(path)
return map(filter(split(globpath(a:path, '**'), '\n'), 'isdirectory(v:val)'), 's:path(v:val)') return map(filter(split(globpath(a:path, '**'), '\n'), 'isdirectory(v:val)'), 's:path(v:val)')
endfunction endfunction
function! s:progress_bar(line, cnt, total)
call setline(a:line, '[' . s:lpad(repeat('=', a:cnt), a:total) . ']')
endfunction
function! s:git_valid(spec, cd) function! s:git_valid(spec, cd)
if a:cd | execute "cd " . a:spec.dir | endif if isdirectory(a:spec.dir)
let ret = s:system("git config remote.origin.url") == a:spec.uri if a:cd | execute "cd " . a:spec.dir | endif
if a:cd | cd - | endif let ret = s:system("git config remote.origin.url") == a:spec.uri
if a:cd | cd - | endif
else
let ret = 0
endif
return ret return ret
endfunction endfunction
function! s:clean() function! s:clean(force)
call s:prepare() call s:prepare()
call append(0, 'Removing unused plugins in '.g:plug_home) call append(0, 'Removing unused plugins in '.g:plug_home)
call append(1, '')
" List of valid directories " List of valid directories
let dirs = map(filter(values(g:plugs), 's:git_valid(v:val, 1)'), 'v:val.dir') let dirs = []
let [cnt, total] = [0, len(g:plugs)]
for spec in values(g:plugs)
if s:git_valid(spec, 1)
call add(dirs, spec.dir)
endif
let cnt += 1
call s:progress_bar(2, cnt, total)
redraw
endfor
let alldirs = dirs + let alldirs = dirs +
\ map(copy(dirs), 'fnamemodify(v:val, ":h")') \ map(copy(dirs), 'fnamemodify(v:val, ":h")')
@ -379,9 +397,9 @@ function! s:clean()
call append(line('$'), 'Already clean.') call append(line('$'), 'Already clean.')
else else
call inputsave() call inputsave()
let yes = input("Proceed? (Y/N) ") let yes = a:force || input("Proceed? (Y/N) ")
call inputrestore() call inputrestore()
if yes =~? '^y' if a:force || yes =~? '^y'
for dir in todo for dir in todo
if isdirectory(dir) if isdirectory(dir)
call system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . dir) call system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . dir)