Rename and relocate s:TempCmd()

This commit is contained in:
Tim Pope
2021-08-06 21:49:21 -04:00
parent a25d4d6961
commit 2dc08dfe35

View File

@@ -597,6 +597,24 @@ function! s:TreeChomp(...) abort
throw 'fugitive: error running `' . cmd . '`: ' . out throw 'fugitive: error running `' . cmd . '`: ' . out
endfunction endfunction
function! s:StdoutToFile(out, cmd) abort
try
let cmd = (type(a:cmd) == type([]) ? fugitive#Prepare(a:cmd) : a:cmd)
let redir = ' > ' . a:out
let pwsh = &shell =~# '\%(powershell\|pwsh\)\%(\.exe\)\=$'
if pwsh && has('patch-8.2.3079')
return s:SystemError(&shell . ' ' . &shellcmdflag . ' ' . s:shellesc(cmd . redir))
elseif (s:winshell() || pwsh) && !has('nvim')
let cmd_escape_char = &shellxquote == '(' ? '^' : '^^^'
return s:SystemError('cmd /c "' . s:gsub(cmd, '[<>%]', cmd_escape_char . '&') . redir . '"')
elseif &shell =~# 'fish'
return s:SystemError(' begin;' . cmd . redir . ';end ')
else
return s:SystemError(' (' . cmd . redir . ') ')
endif
endtry
endfunction
function! s:EchoExec(...) abort function! s:EchoExec(...) abort
if s:RunJobs() if s:RunJobs()
return 'Git ' . s:fnameescape(a:000) return 'Git ' . s:fnameescape(a:000)
@@ -1652,24 +1670,6 @@ function! fugitive#setfperm(url, perm) abort
return len(error) ? -1 : 0 return len(error) ? -1 : 0
endfunction endfunction
function! s:TempCmd(out, cmd) abort
try
let cmd = (type(a:cmd) == type([]) ? fugitive#Prepare(a:cmd) : a:cmd)
let redir = ' > ' . a:out
let pwsh = &shell =~# '\%(powershell\|pwsh\)\%(\.exe\)\=$'
if pwsh && has('patch-8.2.3079')
return s:SystemError(&shell . ' ' . &shellcmdflag . ' ' . s:shellesc(cmd . redir))
elseif (s:winshell() || pwsh) && !has('nvim')
let cmd_escape_char = &shellxquote == '(' ? '^' : '^^^'
return s:SystemError('cmd /c "' . s:gsub(cmd, '[<>%]', cmd_escape_char . '&') . redir . '"')
elseif &shell =~# 'fish'
return s:SystemError(' begin;' . cmd . redir . ';end ')
else
return s:SystemError(' (' . cmd . redir . ') ')
endif
endtry
endfunction
if !exists('s:blobdirs') if !exists('s:blobdirs')
let s:blobdirs = {} let s:blobdirs = {}
endif endif
@@ -1688,7 +1688,7 @@ function! s:BlobTemp(url) abort
endif endif
if commit =~# '^\d$' || !filereadable(tempfile) if commit =~# '^\d$' || !filereadable(tempfile)
let rev = s:DirRev(a:url)[1] let rev = s:DirRev(a:url)[1]
let exec_error = s:TempCmd(tempfile, [dir, 'cat-file', 'blob', rev])[1] let exec_error = s:StdoutToFile(tempfile, [dir, 'cat-file', 'blob', rev])[1]
if exec_error if exec_error
call delete(tempfile) call delete(tempfile)
return '' return ''
@@ -1959,9 +1959,9 @@ endfunction
function! s:ReplaceCmd(cmd) abort function! s:ReplaceCmd(cmd) abort
let temp = tempname() let temp = tempname()
let [err, exec_error] = s:TempCmd(temp, a:cmd) let [err, exec_error] = s:StdoutToFile(temp, a:cmd)
if exec_error if exec_error
throw 'fugitive: ' . (len(err) ? err : 'unknown error running ' . string(a:cmd)) throw 'fugitive: ' . (len(err) ? substitute(err, "\n$", '', '') : 'unknown error running ' . string(a:cmd))
endif endif
setlocal noswapfile setlocal noswapfile
silent exe 'lockmarks keepalt 0read ++edit' s:fnameescape(temp) silent exe 'lockmarks keepalt 0read ++edit' s:fnameescape(temp)
@@ -5962,7 +5962,7 @@ function! s:BlameSubcommand(line1, count, range, bang, mods, options) abort
let delete_in = 1 let delete_in = 1
endif endif
let basecmd = [{'git': a:options.git, 'dir': dir}] + ['--literal-pathspecs'] + cmd + ['--'] + (len(files) ? files : [file]) let basecmd = [{'git': a:options.git, 'dir': dir}] + ['--literal-pathspecs'] + cmd + ['--'] + (len(files) ? files : [file])
let [err, exec_error] = s:TempCmd(temp, basecmd) let [err, exec_error] = s:StdoutToFile(temp, basecmd)
if exists('delete_in') if exists('delete_in')
call delete(tempname . '.in') call delete(tempname . '.in')
endif endif