Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions autoload/vundle.vim
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,14 @@ let vundle#lazy_load = 0
let vundle#log = []
let vundle#updated_bundles = []

if !exists('g:vundle#git_executable')
let vundle#git_executable = 'git'
endif
if !exists('g:vundle#curl_executable')
let vundle#curl_executable = 'curl'
endif
if !exists('g:vundle#wget_executable')
let vundle#wget_executable = 'wget'
endif

" vim: set expandtab sts=2 ts=2 sw=2 tw=78 norl:
64 changes: 43 additions & 21 deletions autoload/vundle/installer.vim
Original file line number Diff line number Diff line change
Expand Up @@ -343,8 +343,7 @@ endf
" return -- the URL for the origin remote (string)
" ---------------------------------------------------------------------------
func! s:get_current_origin_url(bundle) abort
let cmd = 'cd '.vundle#installer#shellesc(a:bundle.path()).' && git config --get remote.origin.url'
let cmd = vundle#installer#shellesc_cd(cmd)
let cmd = s:make_git_command(a:bundle, ['config', '--get', 'remote.origin.url'])
let out = s:strip(s:system(cmd))
return out
endf
Expand All @@ -357,12 +356,37 @@ endf
" return -- A 15 character log sha for the current HEAD
" ---------------------------------------------------------------------------
func! s:get_current_sha(bundle)
let cmd = 'cd '.vundle#installer#shellesc(a:bundle.path()).' && git rev-parse HEAD'
let cmd = vundle#installer#shellesc_cd(cmd)
let cmd = s:make_git_command(a:bundle, ['rev-parse', 'HEAD'])
let out = s:system(cmd)[0:15]
return out
endf

" ---------------------------------------------------------------------------
" Build a safe (escaped) git command
"
" bundle -- A bundle object to get the path to the git dir
" args -- A list of arguments to the git executable
" return -- A string containing the escaped shell command
" ---------------------------------------------------------------------------
func! s:make_git_command(bundle, args) abort
let workdir = a:bundle.path()
let gitdir = workdir.'/.git/'

let git = [g:vundle#git_executable, '--git-dir='.gitdir, '--work-tree='.workdir]

return join(map(git + a:args, 'vundle#installer#shellesc(v:val)'))
endf

" ---------------------------------------------------------------------------
" Build a safe (escaped) command from list of git args
"
" bundle -- A bundle object to get the path to the git dir
" argss -- A list of lists of arguments to successive git calls
" return -- A string containing the escaped shell command
" ---------------------------------------------------------------------------
func! s:make_git_commands(bundle, argss) abort
return join(map(a:argss, 's:make_git_command(a:bundle, v:val)'), ' && ')
endf

" ---------------------------------------------------------------------------
" Create the appropriate sync command to run according to the current state of
Expand All @@ -388,14 +412,12 @@ func! s:make_sync_command(bang, bundle) abort
call s:log('> Plugin ' . a:bundle.name . ' new URI: ' . a:bundle.uri)
" Directory names match but the origin remotes are not the same
let cmd_parts = [
\ 'cd '.vundle#installer#shellesc(a:bundle.path()) ,
\ 'git remote set-url origin ' . vundle#installer#shellesc(a:bundle.uri),
\ 'git fetch',
\ 'git reset --hard origin/HEAD',
\ 'git submodule update --init --recursive',
\ ]
let cmd = join(cmd_parts, ' && ')
let cmd = vundle#installer#shellesc_cd(cmd)
\ [ 'remote', 'set-url', 'origin', a:bundle.uri ],
\ [ 'fetch' ],
\ [ 'reset', '--hard', 'origin/HEAD' ],
\ [ 'submodule', 'update', '--init', '--recursive' ]
\]
let cmd = s:make_git_commands(a:bundle, cmd_parts)
let initial_sha = ''
return [cmd, initial_sha]
endif
Expand All @@ -406,16 +428,13 @@ func! s:make_sync_command(bang, bundle) abort
endif

let cmd_parts = [
\ 'cd '.vundle#installer#shellesc(a:bundle.path()),
\ 'git pull',
\ 'git submodule update --init --recursive',
\ ]
let cmd = join(cmd_parts, ' && ')
let cmd = vundle#installer#shellesc_cd(cmd)

\ [ 'pull'],
\ [ 'submodule', 'update', '--init', '--recursive']
\]
let cmd = s:make_git_commands(a:bundle, cmd_parts)
let initial_sha = s:get_current_sha(a:bundle)
else
let cmd = 'git clone --recursive '.vundle#installer#shellesc(a:bundle.uri).' '.vundle#installer#shellesc(a:bundle.path())
let cmd = s:make_git_command(a:bundle, ['clone', '--recursive', a:bundle.uri, a:bundle.path()])
let initial_sha = ''
endif
return [cmd, initial_sha]
Expand Down Expand Up @@ -527,8 +546,11 @@ func! s:log(str, ...) abort
let fmt = '%Y-%m-%d %H:%M:%S'
let lines = split(a:str, '\n', 1)
let time = strftime(fmt)
let entry_prefix = '['. time .'] '. prefix
for line in lines
call add(g:vundle#log, '['. time .'] '. prefix . line)
" Trim trailing whitespace
let entry = substitute(entry_prefix . line, '\m\s\+$', '', '')
call add(g:vundle#log, entry)
endfor
return a:str
endf
Expand Down
18 changes: 8 additions & 10 deletions autoload/vundle/scripts.vim
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ func! s:view_log()
setl buftype=nofile
setl noswapfile
setl ro noma
setfiletype vundlelog

wincmd P | wincmd H
endf
Expand All @@ -83,11 +84,8 @@ func! s:create_changelog() abort
let updated_sha = bundle_data[1]
let bundle = bundle_data[2]

let cmd = 'cd '.vundle#installer#shellesc(bundle.path()).
\ ' && git log --pretty=format:"%s %an, %ar" --graph '.
\ initial_sha.'..'.updated_sha

let cmd = vundle#installer#shellesc_cd(cmd)
let cmd = s:make_git_command(bundle, ['log', '--pretty=format:"%s %an, %ar"',
\ '--graph', initial_sha.'..'.updated_sha ])

let updates = system(cmd)

Expand Down Expand Up @@ -124,7 +122,7 @@ func! s:view_changelog()
setl buftype=nofile
setl noswapfile
setl ro noma
setfiletype vundlelog
setfiletype vundlechangelog

wincmd P | wincmd H
endf
Expand Down Expand Up @@ -235,11 +233,11 @@ func! s:fetch_scripts(to)
endif

let l:vim_scripts_json = 'http://vim-scripts.org/api/scripts.json'
if executable("curl")
let cmd = 'curl --fail -s -o '.vundle#installer#shellesc(a:to).' '.l:vim_scripts_json
elseif executable("wget")
if executable(g:vundle#curl_executable)
let cmd = g:vundle#curl_executable.' --fail -s -o '.vundle#installer#shellesc(a:to).' '.l:vim_scripts_json
elseif executable(g:vundle#wget_executable)
let temp = vundle#installer#shellesc(tempname())
let cmd = 'wget -q -O '.temp.' '.l:vim_scripts_json. ' && mv -f '.temp.' '.vundle#installer#shellesc(a:to)
let cmd = g:vundle#wget_executable.' -q -O '.temp.' '.l:vim_scripts_json. ' && mv -f '.temp.' '.vundle#installer#shellesc(a:to)
if (has('win32') || has('win64'))
let cmd = substitute(cmd, 'mv -f ', 'move /Y ', '') " change force flag
let cmd = vundle#installer#shellesc(cmd)
Expand Down
15 changes: 15 additions & 0 deletions ftplugin/vundlechangelog.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
" ---------------------------------------------------------------------------
" Standard ftplugin boilerplate; see ':help ftplugin'.
" ---------------------------------------------------------------------------
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1


" ---------------------------------------------------------------------------
" Settings for the Vundle update log buffer.
" ---------------------------------------------------------------------------
setlocal textwidth=0
setlocal nowrap
setlocal noswapfile
3 changes: 1 addition & 2 deletions ftplugin/vundlelog.vim
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ let b:did_ftplugin = 1


" ---------------------------------------------------------------------------
" Settings for the Vundle update log buffer.
" Settings for the Vundle log buffer.
" ---------------------------------------------------------------------------
setlocal textwidth=0
setlocal nowrap
setlocal noswapfile
36 changes: 36 additions & 0 deletions syntax/vundlechangelog.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
" ---------------------------------------------------------------------------
" Syntax highlighting for the line which identifies the plugin.
" ---------------------------------------------------------------------------
syntax match VundlePluginName '\v(^Updated Plugin: )@<=.*$'
highlight link VundlePluginName Keyword

" ---------------------------------------------------------------------------
" Syntax highlighting for the 'compare at' line of each plugin.
" ---------------------------------------------------------------------------
syntax region VundleCompareLine start='\v^Compare at: https:' end='\v\n'
\ contains=VundleCompareUrl
syntax match VundleCompareUrl '\vhttps:\S+'
highlight link VundleCompareLine Comment
highlight link VundleCompareUrl Underlined

" ---------------------------------------------------------------------------
" Syntax highlighting for individual commits.
" ---------------------------------------------------------------------------
" The main commit line.
" Note that this regex is intimately related to the one for VundleCommitTree,
" and the two should be changed in sync.
syntax match VundleCommitLine '\v(^ [|*]( *[\\|/\*])* )@<=[^*|].*$'
\ contains=VundleCommitMerge,VundleCommitUser,VundleCommitTime
highlight link VundleCommitLine String
" Sub-regions inside the commit message.
syntax match VundleCommitMerge '\v Merge pull request #\d+.*'
syntax match VundleCommitUser '\v( )@<=\S+( \S+)*(, \d+ \w+ ago$)@='
syntax match VundleCommitTime '\v(, )@<=\d+ \w+ ago$'
highlight link VundleCommitMerge Ignore
highlight link VundleCommitUser Identifier
highlight link VundleCommitTime Comment
" The git history DAG markers are outside of the main commit line region.
" Note that this regex is intimately related to the one for VundleCommitLine,
" and the two should be changed in sync.
syntax match VundleCommitTree '\v(^ )@<=[|*]( *[\\|/\*])*'
highlight link VundleCommitTree Label
58 changes: 32 additions & 26 deletions syntax/vundlelog.vim
Original file line number Diff line number Diff line change
@@ -1,36 +1,42 @@
" ---------------------------------------------------------------------------
" Syntax highlighting for the line which identifies the plugin.
" ---------------------------------------------------------------------------
syntax match VundlePluginName '\v(^Updated Plugin: )@<=.*$'
syntax match VundlePluginName '\v\C(Plugin )@<=\S+/\S+(\s|$)'
highlight link VundlePluginName Keyword

" ---------------------------------------------------------------------------
" Syntax highlighting for the 'compare at' line of each plugin.
" Syntax highlighting for diffs on each plugin
" ---------------------------------------------------------------------------
syntax region VundleCompareLine start='\v^Compare at: https:' end='\v\n'
\ contains=VundleCompareUrl
syntax match VundleCompareUrl '\vhttps:\S+'
highlight link VundleCompareLine Comment
highlight link VundleCompareUrl Underlined
syntax match VundleGitAddition '\v(\|\s*\d+ )@<=\++'
highlight VundleGitAddition guifg=darkgreen guibg=NONE gui=bold
\ ctermfg=darkgreen ctermbg=NONE cterm=bold

syntax match VundleGitDeletion '\v(\|\s*\d+ \+*)@<=-+'
highlight VundleGitDeletion guifg=red guibg=NONE gui=bold ctermfg=red
\ ctermbg=NONE cterm=bold

" ---------------------------------------------------------------------------
" Syntax highlighting for individual commits.
" Syntax highlighting for log-specific features
" ---------------------------------------------------------------------------
" The main commit line.
" Note that this regex is intimately related to the one for VundleCommitTree,
" and the two should be changed in sync.
syntax match VundleCommitLine '\v(^ [|*]( *[\\|/\*])* )@<=[^*|].*$'
\ contains=VundleCommitMerge,VundleCommitUser,VundleCommitTime
highlight link VundleCommitLine String
" Sub-regions inside the commit message.
syntax match VundleCommitMerge '\v Merge pull request #\d+.*'
syntax match VundleCommitUser '\v( )@<=\S+( \S+)*(, \d+ \w+ ago$)@='
syntax match VundleCommitTime '\v(, )@<=\d+ \w+ ago$'
highlight link VundleCommitMerge Ignore
highlight link VundleCommitUser Identifier
highlight link VundleCommitTime Comment
" The git history DAG markers are outside of the main commit line region.
" Note that this regex is intimately related to the one for VundleCommitLine,
" and the two should be changed in sync.
syntax match VundleCommitTree '\v(^ )@<=[|*]( *[\\|/\*])*'
highlight link VundleCommitTree Label
syntax match VundleCaret '\V >'
highlight link VundleCaret Label

" Make path to tags file stand out
syntax match VundleTagPath '\v\C(:helptags )@<=/\S+$'
highlight link VundleTagPath Comment

" Make URL stand out
syntax match VundleCompareUrl '\v\Chttps:\S+'
highlight link VundleCompareUrl Underlined

" Make errors (from git) stand out
syntax match VundleError '\v\C( \> )@<=fatal:.*$'
highlight link VundleError Error

" Make git messages stand out
syntax match VundleGitMsg '\v\C( \> )@<=git:.*$'
highlight link VundleGitMsg Type

" De-emphasize the time stamp
syntax match VundleTimeStamp '\m^\[\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2}]'
highlight link VundleTimeStamp String