Implement PlugSnapshot (#97)
Known issue: After running the script, PlugDiff will show "future" commits.
This commit is contained in:
parent
38510a8788
commit
afc20ecff3
|
@ -69,6 +69,7 @@ Reload .vimrc and `:PlugInstall` to install plugins.
|
||||||
| `PlugUpgrade` | Upgrade vim-plug itself |
|
| `PlugUpgrade` | Upgrade vim-plug itself |
|
||||||
| `PlugStatus` | Check the status of plugins |
|
| `PlugStatus` | Check the status of plugins |
|
||||||
| `PlugDiff` | See the updated changes from the previous PlugUpdate |
|
| `PlugDiff` | See the updated changes from the previous PlugUpdate |
|
||||||
|
| `PlugSnapshot [output path]` | Generate script for restoring the current snapshot of the plugins |
|
||||||
|
|
||||||
### `Plug` options
|
### `Plug` options
|
||||||
|
|
||||||
|
|
40
plug.vim
40
plug.vim
|
@ -113,6 +113,7 @@ function! s:define_commands()
|
||||||
command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:me | endif
|
command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:me | endif
|
||||||
command! -nargs=0 -bar PlugStatus call s:status()
|
command! -nargs=0 -bar PlugStatus call s:status()
|
||||||
command! -nargs=0 -bar PlugDiff call s:diff()
|
command! -nargs=0 -bar PlugDiff call s:diff()
|
||||||
|
command! -nargs=? -bar PlugSnapshot call s:snapshot(<f-args>)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:to_a(v)
|
function! s:to_a(v)
|
||||||
|
@ -1280,6 +1281,45 @@ function! s:revert()
|
||||||
echo 'Reverted.'
|
echo 'Reverted.'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:snapshot(...) abort
|
||||||
|
let [type, var, header] = s:is_win ?
|
||||||
|
\ ['dosbatch', '%PLUG_HOME%',
|
||||||
|
\ ['@echo off', ':: Generated by vim-plug', ':: '.strftime("%c"), '',
|
||||||
|
\ ':: Make sure to PlugUpdate first', '', 'set PLUG_HOME='.s:esc(g:plug_home)]] :
|
||||||
|
\ ['sh', '$PLUG_HOME',
|
||||||
|
\ ['#!/bin/bash', '# Generated by vim-plug', '# '.strftime("%c"), '',
|
||||||
|
\ 'vim +PlugUpdate +qa', '', 'PLUG_HOME='.s:esc(g:plug_home)]]
|
||||||
|
|
||||||
|
call s:prepare()
|
||||||
|
execute 'setf' type
|
||||||
|
call append(0, header)
|
||||||
|
call append('$', '')
|
||||||
|
1
|
||||||
|
redraw
|
||||||
|
|
||||||
|
let dirs = sort(map(values(filter(copy(g:plugs),
|
||||||
|
\'has_key(v:val, "uri") && isdirectory(v:val.dir)')), 'v:val.dir'))
|
||||||
|
let anchor = line('$') - 1
|
||||||
|
for dir in reverse(dirs)
|
||||||
|
execute 'cd' dir
|
||||||
|
let sha = substitute(system('git rev-parse --short HEAD'), '\n', '', '')
|
||||||
|
cd -
|
||||||
|
if !v:shell_error
|
||||||
|
call append(anchor, printf('cd %s && git reset --hard %s',
|
||||||
|
\ substitute(dir, '^'.g:plug_home, var, ''), sha))
|
||||||
|
redraw
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if a:0 > 0
|
||||||
|
let fn = s:esc(expand(a:1))
|
||||||
|
call writefile(getline(1, '$'), fn)
|
||||||
|
if !s:is_win | call system('chmod +x ' . fn) | endif
|
||||||
|
echo 'Saved to '.a:1
|
||||||
|
silent execute 'e' fn
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:split_rtp()
|
function! s:split_rtp()
|
||||||
return split(&rtp, '\\\@<!,')
|
return split(&rtp, '\\\@<!,')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
Loading…
Reference in New Issue
Block a user