Partition public and private job state

This commit is contained in:
Tim Pope
2021-03-17 22:07:49 -04:00
parent 39d904051d
commit d7c2e50816

View File

@@ -2332,15 +2332,15 @@ function! s:RunEdit(state, job) abort
endif endif
endfunction endfunction
function! s:RunReceive(state, type, job, data, ...) abort function! s:RunReceive(state, tmp, type, job, data, ...) abort
call add(a:state.log, a:data) call add(a:state.log, a:data)
let data = type(a:data) == type([]) ? join(a:data, "\n") : a:data let data = type(a:data) == type([]) ? join(a:data, "\n") : a:data
if a:type ==# 'err' || a:state.pty if a:type ==# 'err' || a:state.pty
let data = a:state.escape_buffer . data let data = a:tmp.escape . data
let escape = "\033]51;[^\007]*" let escape = "\033]51;[^\007]*"
let a:state.escape_buffer = matchstr(data, escape . '$') let a:tmp.escape = matchstr(data, escape . '$')
if len(a:state.escape_buffer) if len(a:tmp.escape)
let data = strpart(data, 0, len(data) - len(a:state.escape_buffer)) let data = strpart(data, 0, len(data) - len(a:tmp.escape))
endif endif
let cmd = matchstr(data, escape . "\007")[5:-2] let cmd = matchstr(data, escape . "\007")[5:-2]
let data = substitute(data, escape . "\007", '', 'g') let data = substitute(data, escape . "\007", '', 'g')
@@ -2348,10 +2348,10 @@ function! s:RunReceive(state, type, job, data, ...) abort
let a:state.request = strpart(cmd, 9) let a:state.request = strpart(cmd, 9)
endif endif
endif endif
let data = a:state.echo_buffer . data let data = a:tmp.echo . data
let a:state.echo_buffer = matchstr(data, "[\r\n]\\+$") let a:tmp.echo = matchstr(data, "[\r\n]\\+$")
if len(a:state.echo_buffer) if len(a:tmp.echo)
let data = strpart(data, 0, len(data) - len(a:state.echo_buffer)) let data = strpart(data, 0, len(data) - len(a:tmp.echo))
endif endif
echon substitute(data, "\r\\ze\n", '', 'g') echon substitute(data, "\r\\ze\n", '', 'g')
endfunction endfunction
@@ -2620,16 +2620,15 @@ function! fugitive#Command(line1, line2, range, bang, mods, arg) abort
let state = { let state = {
\ 'dir': dir, \ 'dir': dir,
\ 'mods': s:Mods(a:mods), \ 'mods': s:Mods(a:mods),
\ 'title': ':Git ' . a:arg,
\ 'echo_buffer': '',
\ 'escape_buffer': '',
\ 'log': [], \ 'log': [],
\ 'temp': s:Resolve(tempname())} \ 'temp': s:Resolve(tempname())}
let state.pty = get(g:, 'fugitive_pty', has('unix') && (has('patch-8.0.0744') || has('nvim'))) let state.pty = get(g:, 'fugitive_pty', has('unix') && (has('patch-8.0.0744') || has('nvim')))
if !state.pty if !state.pty
let args = s:AskPassArgs(dir) + args let args = s:AskPassArgs(dir) + args
endif endif
let env.FUGITIVE_TEMP = state.temp let tmp = {
\ 'echo': '',
\ 'escape': ''}
let env.FUGITIVE = state.temp let env.FUGITIVE = state.temp
let editor = 'sh ' . s:TempScript( let editor = 'sh ' . s:TempScript(
\ '[ -f "$FUGITIVE.exit" ] && exit 1', \ '[ -f "$FUGITIVE.exit" ] && exit 1',
@@ -2654,8 +2653,8 @@ function! fugitive#Command(line1, line2, range, bang, mods, arg) abort
if exists('*job_start') if exists('*job_start')
call extend(jobopts, { call extend(jobopts, {
\ 'mode': 'raw', \ 'mode': 'raw',
\ 'out_cb': function('s:RunReceive', [state, 'out']), \ 'out_cb': function('s:RunReceive', [state, tmp, 'out']),
\ 'err_cb': function('s:RunReceive', [state, 'err']), \ 'err_cb': function('s:RunReceive', [state, tmp, 'err']),
\ }) \ })
if state.pty if state.pty
let jobopts.pty = 1 let jobopts.pty = 1
@@ -2665,8 +2664,8 @@ function! fugitive#Command(line1, line2, range, bang, mods, arg) abort
let job = jobstart(argv, extend(jobopts, { let job = jobstart(argv, extend(jobopts, {
\ 'pty': state.pty, \ 'pty': state.pty,
\ 'TERM': 'dumb', \ 'TERM': 'dumb',
\ 'on_stdout': function('s:RunReceive', [state, 'out']), \ 'on_stdout': function('s:RunReceive', [state, tmp, 'out']),
\ 'on_stderr': function('s:RunReceive', [state, 'err']), \ 'on_stderr': function('s:RunReceive', [state, tmp, 'err']),
\ })) \ }))
endif endif
let state.job = job let state.job = job