Switch &shell during submodule update

Fix #481
This commit is contained in:
Junegunn Choi 2016-04-29 13:38:28 +09:00
parent 41de3c713c
commit 656ccef8dc
2 changed files with 17 additions and 5 deletions

View File

@ -722,15 +722,25 @@ function! s:assign_name()
silent! execute 'f' fnameescape(name)
endfunction
function! s:chsh(swap)
let prev = [&shell, &shellredir]
if !s:is_win && a:swap
set shell=sh shellredir=>%s\ 2>&1
endif
return prev
endfunction
function! s:bang(cmd, ...)
try
let [sh, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows.
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
let g:_plug_bang = '!'.escape(cmd, '#!%')
execute "normal! :execute g:_plug_bang\<cr>\<cr>"
finally
unlet g:_plug_bang
let [&shell, &shellredir] = [sh, shrd]
endtry
return v:shell_error ? 'Exit status: ' . v:shell_error : ''
endfunction
@ -1823,10 +1833,7 @@ endfunction
function! s:system(cmd, ...)
try
let [sh, shrd] = [&shell, &shellredir]
if !s:is_win
set shell=sh shellredir=>%s\ 2>&1
endif
let [sh, shrd] = s:chsh(1)
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
return system(s:is_win ? '('.cmd.')' : cmd)
finally

View File

@ -841,7 +841,12 @@ Execute (PlugUpdate!):
Execute (When submodules are not initialized):
call system(printf('cd %s && git submodule deinit subsubmodule', g:plugs['subsubmodule'].dir))
^ #481 submodule update should use standard shell
let sh = &shell
set sh=/bin/echo
silent PlugUpdate!
let &shell = sh
unlet sh
q
AssertEqual ' ', system(printf('cd %s && git submodule status', g:plugs['subsubmodule'].dir))[0],
\ 'subsubmodule/subsubmodule should be initialized'