Merge branch 'master' into fast-git
This commit is contained in:
commit
0e9ac7fd20
|
@ -116,7 +116,7 @@ Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
|
||||||
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
||||||
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
||||||
|
|
||||||
" Using a non-master branch
|
" Using a non-default branch
|
||||||
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
||||||
|
|
||||||
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
||||||
|
|
|
@ -163,7 +163,7 @@ Example~
|
||||||
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
||||||
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
||||||
|
|
||||||
" Using a non-master branch
|
" Using a non-default branch
|
||||||
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
||||||
|
|
||||||
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
||||||
|
@ -204,6 +204,7 @@ Reload .vimrc and `:PlugInstall` to install plugins.
|
||||||
|
|
||||||
< Plug options >______________________________________________________________~
|
< Plug options >______________________________________________________________~
|
||||||
*plug-options*
|
*plug-options*
|
||||||
|
*:Plug*
|
||||||
|
|
||||||
------------------------+-----------------------------------------------
|
------------------------+-----------------------------------------------
|
||||||
Option | Description ~
|
Option | Description ~
|
||||||
|
|
110
plug.vim
110
plug.vim
|
@ -25,7 +25,7 @@
|
||||||
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
||||||
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
||||||
"
|
"
|
||||||
" " Using a non-master branch
|
" " Using a non-default branch
|
||||||
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
|
||||||
"
|
"
|
||||||
" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
|
||||||
|
@ -106,7 +106,7 @@ if s:is_win && &shellslash
|
||||||
else
|
else
|
||||||
let s:me = resolve(expand('<sfile>:p'))
|
let s:me = resolve(expand('<sfile>:p'))
|
||||||
endif
|
endif
|
||||||
let s:base_spec = { 'branch': 'master', 'frozen': 0 }
|
let s:base_spec = { 'branch': '', 'frozen': 0 }
|
||||||
let s:TYPE = {
|
let s:TYPE = {
|
||||||
\ 'string': type(''),
|
\ 'string': type(''),
|
||||||
\ 'list': type([]),
|
\ 'list': type([]),
|
||||||
|
@ -744,25 +744,25 @@ function! s:parse_options(arg)
|
||||||
endif
|
endif
|
||||||
let opts.tag = a:arg
|
let opts.tag = a:arg
|
||||||
elseif type == s:TYPE.dict
|
elseif type == s:TYPE.dict
|
||||||
call extend(opts, a:arg)
|
|
||||||
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
|
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
|
||||||
if has_key(opts, opt)
|
if has_key(a:arg, opt)
|
||||||
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt]))
|
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
|
||||||
throw printf(opt_errfmt, opt, 'string')
|
throw printf(opt_errfmt, opt, 'string')
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
for opt in ['on', 'for']
|
for opt in ['on', 'for']
|
||||||
if has_key(opts, opt)
|
if has_key(a:arg, opt)
|
||||||
\ && type(opts[opt]) != s:TYPE.list
|
\ && type(a:arg[opt]) != s:TYPE.list
|
||||||
\ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt]))
|
\ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
|
||||||
throw printf(opt_errfmt, opt, 'string or list')
|
throw printf(opt_errfmt, opt, 'string or list')
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if has_key(opts, 'do')
|
if has_key(a:arg, 'do')
|
||||||
\ && type(opts.do) != s:TYPE.funcref
|
\ && type(a:arg.do) != s:TYPE.funcref
|
||||||
\ && (type(opts.do) != s:TYPE.string || empty(opts.do))
|
\ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
|
||||||
throw printf(opt_errfmt, 'do', 'string or funcref')
|
throw printf(opt_errfmt, 'do', 'string or funcref')
|
||||||
endif
|
endif
|
||||||
|
call extend(opts, a:arg)
|
||||||
if has_key(opts, 'dir')
|
if has_key(opts, 'dir')
|
||||||
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
|
let opts.dir = s:dirpath(s:plug_expand(opts.dir))
|
||||||
endif
|
endif
|
||||||
|
@ -1304,7 +1304,7 @@ function! s:update_finish()
|
||||||
call s:log4(name, 'Checking out '.tag)
|
call s:log4(name, 'Checking out '.tag)
|
||||||
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
|
let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
|
||||||
else
|
else
|
||||||
let branch = get(spec, 'branch', 'master')
|
let branch = s:git_origin_branch(spec)
|
||||||
call s:log4(name, 'Merging origin/'.s:esc(branch))
|
call s:log4(name, 'Merging origin/'.s:esc(branch))
|
||||||
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
|
let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1'
|
||||||
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
|
\. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir)
|
||||||
|
@ -2306,6 +2306,22 @@ function! s:system_chomp(...)
|
||||||
return v:shell_error ? '' : substitute(ret, '\n$', '', '')
|
return v:shell_error ? '' : substitute(ret, '\n$', '', '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:git_origin_branch(spec)
|
||||||
|
if len(a:spec.branch)
|
||||||
|
return a:spec.branch
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The file may not be present if this is a local repository
|
||||||
|
let origin_head = a:spec.dir.'/.git/refs/remotes/origin/HEAD'
|
||||||
|
if filereadable(origin_head)
|
||||||
|
return split(readfile(origin_head)[0], 'refs/remotes/origin/')[-1]
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The command may not return the name of a branch in detached HEAD state
|
||||||
|
let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
|
||||||
|
return v:shell_error ? '' : result[-1]
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:git_validate(spec, check_branch)
|
function! s:git_validate(spec, check_branch)
|
||||||
let err = ''
|
let err = ''
|
||||||
if isdirectory(a:spec.dir)
|
if isdirectory(a:spec.dir)
|
||||||
|
@ -2327,8 +2343,9 @@ function! s:git_validate(spec, check_branch)
|
||||||
\ 'PlugUpdate required.'], "\n")
|
\ 'PlugUpdate required.'], "\n")
|
||||||
endif
|
endif
|
||||||
elseif a:check_branch
|
elseif a:check_branch
|
||||||
let branch = result[0]
|
let current_branch = result[0]
|
||||||
" Check tag
|
" Check tag
|
||||||
|
let origin_branch = s:git_origin_branch(a:spec)
|
||||||
if has_key(a:spec, 'tag')
|
if has_key(a:spec, 'tag')
|
||||||
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
|
let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
|
||||||
if a:spec.tag !=# tag && a:spec.tag !~ '\*'
|
if a:spec.tag !=# tag && a:spec.tag !~ '\*'
|
||||||
|
@ -2336,28 +2353,26 @@ function! s:git_validate(spec, check_branch)
|
||||||
\ (empty(tag) ? 'N/A' : tag), a:spec.tag)
|
\ (empty(tag) ? 'N/A' : tag), a:spec.tag)
|
||||||
endif
|
endif
|
||||||
" Check branch
|
" Check branch
|
||||||
elseif a:spec.branch != '' && a:spec.branch !=# branch
|
elseif origin_branch !=# current_branch
|
||||||
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
|
let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
|
||||||
\ branch, a:spec.branch)
|
\ current_branch, origin_branch)
|
||||||
endif
|
endif
|
||||||
if empty(err)
|
if empty(err)
|
||||||
let result = split(s:lastline(s:system(printf(
|
let [ahead, behind] = split(s:lastline(s:system([
|
||||||
\ 'git rev-list --count --left-right HEAD...origin/%s',
|
\ 'git', 'rev-list', '--count', '--left-right',
|
||||||
\ branch), a:spec.dir)), '\t')
|
\ printf('HEAD...origin/%s', origin_branch)
|
||||||
if !v:shell_error && len(result) == 2
|
\ ], a:spec.dir)), '\t')
|
||||||
let [ahead, behind] = result
|
if !v:shell_error && ahead
|
||||||
if ahead
|
if behind
|
||||||
if behind
|
" Only mention PlugClean if diverged, otherwise it's likely to be
|
||||||
" Only mention PlugClean if diverged, otherwise it's likely to be
|
" pushable (and probably not that messed up).
|
||||||
" pushable (and probably not that messed up).
|
let err = printf(
|
||||||
let err = printf(
|
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
|
||||||
\ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
|
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
|
||||||
\ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', branch, ahead, behind)
|
else
|
||||||
else
|
let err = printf("Ahead of origin/%s by %d commit(s).\n"
|
||||||
let err = printf("Ahead of origin/%s by %d commit(s).\n"
|
\ .'Cannot update until local changes are pushed.',
|
||||||
\ .'Cannot update until local changes are pushed.',
|
\ origin_branch, ahead)
|
||||||
\ branch, ahead)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -2687,20 +2702,23 @@ function! s:diff()
|
||||||
endif
|
endif
|
||||||
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
|
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
|
||||||
for [k, v] in plugs
|
for [k, v] in plugs
|
||||||
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
|
let branch = s:git_origin_branch(v)
|
||||||
let cmd = ['git', 'log', '--graph', '--color=never']
|
if len(branch)
|
||||||
if s:git_version_requirement(2, 10, 0)
|
let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
|
||||||
call add(cmd, '--no-show-signature')
|
let cmd = ['git', 'log', '--graph', '--color=never']
|
||||||
endif
|
if s:git_version_requirement(2, 10, 0)
|
||||||
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
|
call add(cmd, '--no-show-signature')
|
||||||
if has_key(v, 'rtp')
|
endif
|
||||||
call extend(cmd, ['--', v.rtp])
|
call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
|
||||||
endif
|
if has_key(v, 'rtp')
|
||||||
let diff = s:system_chomp(cmd, v.dir)
|
call extend(cmd, ['--', v.rtp])
|
||||||
if !empty(diff)
|
endif
|
||||||
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
|
let diff = s:system_chomp(cmd, v.dir)
|
||||||
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
|
if !empty(diff)
|
||||||
let cnts[origin] += 1
|
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
|
||||||
|
call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
|
||||||
|
let cnts[origin] += 1
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
let bar .= '='
|
let bar .= '='
|
||||||
call s:progress_bar(2, bar, len(total))
|
call s:progress_bar(2, bar, len(total))
|
||||||
|
|
|
@ -68,13 +68,13 @@ Execute (Test Plug command):
|
||||||
" Git URI
|
" Git URI
|
||||||
Plug 'file:///tmp/vim-plug-test/jg/vim-emoji'
|
Plug 'file:///tmp/vim-plug-test/jg/vim-emoji'
|
||||||
AssertEqual 'file:///tmp/vim-plug-test/jg/vim-emoji', g:plugs['vim-emoji'].uri
|
AssertEqual 'file:///tmp/vim-plug-test/jg/vim-emoji', g:plugs['vim-emoji'].uri
|
||||||
AssertEqual 'master', g:plugs['vim-emoji'].branch
|
AssertEqual '', g:plugs['vim-emoji'].branch
|
||||||
AssertEqual join([g:temp_plugged, 'vim-emoji/'], '/'), g:plugs['vim-emoji'].dir
|
AssertEqual join([g:temp_plugged, 'vim-emoji/'], '/'), g:plugs['vim-emoji'].dir
|
||||||
|
|
||||||
" vim-scripts/
|
" vim-scripts/
|
||||||
Plug 'vim-scripts/beauty256'
|
Plug 'vim-scripts/beauty256'
|
||||||
AssertEqual 'file:///tmp/vim-plug-test/vim-scripts/beauty256', g:plugs.beauty256.uri
|
AssertEqual 'file:///tmp/vim-plug-test/vim-scripts/beauty256', g:plugs.beauty256.uri
|
||||||
AssertEqual 'master', g:plugs.beauty256.branch
|
AssertEqual '', g:plugs.beauty256.branch
|
||||||
|
|
||||||
AssertEqual 4, len(g:plugs)
|
AssertEqual 4, len(g:plugs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user