mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 18:50:03 +08:00
191 lines
7.0 KiB
VimL
191 lines
7.0 KiB
VimL
"=============================================================================
|
|
" FILE: neobundle/install.vim
|
|
" AUTHOR: Shougo Matsushita <Shougo.Matsu@gmail.com>
|
|
" License: MIT license {{{
|
|
" Permission is hereby granted, free of charge, to any person obtaining
|
|
" a copy of this software and associated documentation files (the
|
|
" "Software"), to deal in the Software without restriction, including
|
|
" without limitation the rights to use, copy, modify, merge, publish,
|
|
" distribute, sublicense, and/or sell copies of the Software, and to
|
|
" permit persons to whom the Software is furnished to do so, subject to
|
|
" the following conditions:
|
|
"
|
|
" The above copyright notice and this permission notice shall be included
|
|
" in all copies or substantial portions of the Software.
|
|
"
|
|
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
" }}}
|
|
"=============================================================================
|
|
|
|
let s:save_cpo = &cpo
|
|
set cpo&vim
|
|
|
|
function! unite#sources#neobundle_install#define() abort "{{{
|
|
return [s:source_install, s:source_update]
|
|
endfunction"}}}
|
|
|
|
let s:source_install = {
|
|
\ 'name' : 'neobundle/install',
|
|
\ 'description' : 'install bundles',
|
|
\ 'hooks' : {},
|
|
\ 'default_kind' : 'word',
|
|
\ 'syntax' : 'uniteSource__NeoBundleInstall',
|
|
\ }
|
|
|
|
function! s:source_install.hooks.on_init(args, context) abort "{{{
|
|
let bundle_names = filter(copy(a:args), "v:val != '!'")
|
|
let a:context.source__bang =
|
|
\ index(a:args, '!') >= 0 || !empty(bundle_names)
|
|
let a:context.source__not_fuzzy = 0
|
|
call s:init(a:context, bundle_names)
|
|
endfunction"}}}
|
|
|
|
function! s:source_install.hooks.on_syntax(args, context) abort "{{{
|
|
syntax match uniteSource__NeoBundleInstall_Progress /(.\{-}):\s*.*/
|
|
\ contained containedin=uniteSource__NeoBundleInstall
|
|
highlight default link uniteSource__NeoBundleInstall_Progress String
|
|
syntax match uniteSource__NeoBundleInstall_Source /|.\{-}|/
|
|
\ contained containedin=uniteSource__NeoBundleInstall_Progress
|
|
highlight default link uniteSource__NeoBundleInstall_Source Type
|
|
syntax match uniteSource__NeoBundleInstall_URI /-> diff URI/
|
|
\ contained containedin=uniteSource__NeoBundleInstall
|
|
highlight default link uniteSource__NeoBundleInstall_URI Underlined
|
|
endfunction"}}}
|
|
|
|
function! s:source_install.hooks.on_close(args, context) abort "{{{
|
|
if !empty(a:context.source__processes)
|
|
for process in a:context.source__processes
|
|
if has('nvim')
|
|
call jobstop(process.proc)
|
|
else
|
|
call process.proc.waitpid()
|
|
endif
|
|
endfor
|
|
endif
|
|
endfunction"}}}
|
|
|
|
function! s:source_install.async_gather_candidates(args, context) abort "{{{
|
|
if !a:context.sync && empty(filter(range(1, winnr('$')),
|
|
\ "getwinvar(v:val, '&l:filetype') ==# 'unite'"))
|
|
return []
|
|
endif
|
|
|
|
let old_msgs = copy(neobundle#installer#get_updates_log())
|
|
|
|
if a:context.source__number < a:context.source__max_bundles
|
|
while a:context.source__number < a:context.source__max_bundles
|
|
\ && len(a:context.source__processes) <
|
|
\ g:neobundle#install_max_processes
|
|
let bundle = a:context.source__bundles[a:context.source__number]
|
|
call neobundle#installer#sync(bundle, a:context, 1)
|
|
|
|
call unite#clear_message()
|
|
call unite#print_source_message(
|
|
\ neobundle#installer#get_progress_message(bundle,
|
|
\ a:context.source__number,
|
|
\ a:context.source__max_bundles), self.name)
|
|
redrawstatus
|
|
endwhile
|
|
endif
|
|
|
|
if !empty(a:context.source__processes)
|
|
for process in a:context.source__processes
|
|
call neobundle#installer#check_output(a:context, process, 1)
|
|
endfor
|
|
|
|
" Filter eof processes.
|
|
call filter(a:context.source__processes, '!v:val.eof')
|
|
else
|
|
call neobundle#installer#update_log(
|
|
\ neobundle#installer#get_updated_bundles_message(
|
|
\ a:context.source__synced_bundles), 1)
|
|
call neobundle#installer#update_log(
|
|
\ neobundle#installer#get_errored_bundles_message(
|
|
\ a:context.source__errored_bundles), 1)
|
|
call neobundle#installer#update(
|
|
\ a:context.source__synced_bundles)
|
|
|
|
" Finish.
|
|
call neobundle#installer#update_log('Completed.', 1)
|
|
|
|
let a:context.is_async = 0
|
|
endif
|
|
|
|
return map(neobundle#installer#get_updates_log()[len(old_msgs) :], "{
|
|
\ 'word' : (v:val =~ '^\\s*\\h\\w*://' ? ' -> diff URI' : v:val),
|
|
\ 'is_multiline' : 1,
|
|
\ 'kind' : (v:val =~ '^\\s*\\h\\w*://' ? 'uri' : 'word'),
|
|
\ 'action__uri' : substitute(v:val, '^\\s\\+', '', ''),
|
|
\}")
|
|
endfunction"}}}
|
|
|
|
function! s:source_install.complete(args, context, arglead, cmdline, cursorpos) abort "{{{
|
|
return ['!'] +
|
|
\ neobundle#commands#complete_bundles(a:arglead, a:cmdline, a:cursorpos)
|
|
endfunction"}}}
|
|
|
|
let s:source_update = deepcopy(s:source_install)
|
|
let s:source_update.name = 'neobundle/update'
|
|
let s:source_update.description = 'update bundles'
|
|
|
|
function! s:source_update.hooks.on_init(args, context) abort "{{{
|
|
let a:context.source__bang =
|
|
\ index(a:args, 'all') >= 0 ? 2 : 1
|
|
let a:context.source__not_fuzzy = index(a:args, '!') >= 0
|
|
let bundle_names = filter(copy(a:args),
|
|
\ "v:val !=# 'all' && v:val !=# '!'")
|
|
call s:init(a:context, bundle_names)
|
|
endfunction"}}}
|
|
|
|
function! s:init(context, bundle_names) abort "{{{
|
|
let a:context.source__synced_bundles = []
|
|
let a:context.source__errored_bundles = []
|
|
|
|
let a:context.source__processes = []
|
|
|
|
let a:context.source__number = 0
|
|
|
|
let a:context.source__bundles = !a:context.source__bang ?
|
|
\ neobundle#get_force_not_installed_bundles(a:bundle_names) :
|
|
\ empty(a:bundle_names) ?
|
|
\ neobundle#config#get_enabled_bundles() :
|
|
\ a:context.source__not_fuzzy ?
|
|
\ neobundle#config#search(a:bundle_names) :
|
|
\ neobundle#config#fuzzy_search(a:bundle_names)
|
|
|
|
call neobundle#installer#_load_install_info(
|
|
\ a:context.source__bundles)
|
|
|
|
let reinstall_bundles =
|
|
\ neobundle#installer#get_reinstall_bundles(
|
|
\ a:context.source__bundles)
|
|
if !empty(reinstall_bundles)
|
|
call neobundle#installer#reinstall(reinstall_bundles)
|
|
endif
|
|
|
|
let a:context.source__max_bundles =
|
|
\ len(a:context.source__bundles)
|
|
|
|
call neobundle#installer#clear_log()
|
|
|
|
if empty(a:context.source__bundles)
|
|
let a:context.is_async = 0
|
|
call neobundle#installer#error(
|
|
\ 'Target bundles not found. You may use wrong bundle name.')
|
|
else
|
|
call neobundle#installer#update_log(
|
|
\ 'Update started: ' . strftime('(%Y/%m/%d %H:%M:%S)'))
|
|
endif
|
|
endfunction"}}}
|
|
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|
|
|
|
" vim: foldmethod=marker
|