Skip to content

Commit 1a47caf

Browse files
committed
Add extra guarantees around .complete file
I'd like to make the pid a first class id for the request, which means .complete will become more important.
1 parent f56b761 commit 1a47caf

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

autoload/dispatch.vim

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,20 +172,23 @@ function! dispatch#prepare_start(request, ...) abort
172172
let pause = "(printf '\e[1m--- Press ENTER to continue ---\e[0m\\n'; exec head -1)"
173173
if wait == 'always'
174174
let exec .= '; ' . pause
175-
elseif wait !=# 'never'
175+
elseif wait !=# 'never' && wait !=# 'make'
176176
let exec .= "; test ".status." = 0 -o ".status." = 130 || " . pause
177177
endif
178+
if wait !=# 'make'
179+
let exec .= '; touch ' .a:request.file . '.complete'
180+
endif
178181
let callback = dispatch#callback(a:request)
179-
let after = 'rm -f ' . a:request.file . '.pid' .
182+
return exec .
183+
\ '; rm -f ' . a:request.file . '.pid' .
180184
\ (empty(callback) ? '' : '; ' . callback)
181-
return exec . '; ' . after
182185
endfunction
183186

184187
function! dispatch#prepare_make(request, ...) abort
185188
let exec = a:0 ? a:1 : ('(' . a:request.expanded . '; echo ' .
186189
\ dispatch#status_var() . ' > ' . a:request.file . '.complete)' .
187190
\ dispatch#shellpipe(a:request.file))
188-
return dispatch#prepare_start(a:request, exec, 'never')
191+
return dispatch#prepare_start(a:request, exec, 'make')
189192
endfunction
190193

191194
function! dispatch#set_title(request) abort
@@ -761,6 +764,9 @@ endfunction
761764

762765
function! dispatch#pid(request) abort
763766
let request = s:request(a:request)
767+
if dispatch#completed(request)
768+
return 0
769+
endif
764770
let file = request.file
765771
if !has_key(request, 'pid')
766772
if has('win32') && !executable('wmic')
@@ -779,12 +785,16 @@ function! dispatch#pid(request) abort
779785
let request.pid = 0
780786
endtry
781787
endif
782-
if request.pid && getfsize(file.'.pid') > 0
788+
let complete = filereadable(file.'.complete')
789+
if !complete && request.pid && getfsize(file.'.pid') > 0
783790
if s:running(request.handler, request.pid)
784791
return request.pid
785792
else
786793
let request.pid = 0
787794
call delete(file.'.pid')
795+
if !complete
796+
call writefile([], file.'.complete')
797+
endif
788798
endif
789799
endif
790800
endfunction
@@ -801,6 +811,7 @@ function! dispatch#complete(file) abort
801811
let status = readfile(request.file . '.complete', 1)[0]
802812
catch
803813
let status = -1
814+
call writefile([-1], request.file . '.complete')
804815
endtry
805816
if status > 0
806817
let label = 'Failure:'

autoload/dispatch/windows.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ function! dispatch#windows#start(request) abort
6565
\ s:pid . pidfile .
6666
\ ' & ' . a:request.command .
6767
\ pause .
68+
\ ' & cd . > ' . a:request.file.'.complete'
6869
\ ' & del ' . pidfile
6970
endif
7071

0 commit comments

Comments
 (0)