mirror of https://github.com/folke/lazy.nvim.git
fix(task): run on_exit async. See #1569
This commit is contained in:
parent
461552474c
commit
60fe75c88d
|
@ -37,6 +37,7 @@ function Async:sleep(ms)
|
|||
vim.defer_fn(function()
|
||||
self.sleeping = false
|
||||
end, ms)
|
||||
coroutine.yield()
|
||||
end
|
||||
|
||||
function Async:suspend()
|
||||
|
|
|
@ -197,7 +197,21 @@ function M.exec(cmd, opts)
|
|||
lines = _lines
|
||||
end,
|
||||
})
|
||||
vim.fn.jobwait({ job })
|
||||
|
||||
if job <= 0 then
|
||||
error("Failed to start job: " .. vim.inspect(cmd))
|
||||
end
|
||||
|
||||
local Async = require("lazy.async")
|
||||
local async = Async.current
|
||||
if async then
|
||||
while vim.fn.jobwait({ job }, 0)[1] == -1 do
|
||||
async:sleep(10)
|
||||
end
|
||||
else
|
||||
vim.fn.jobwait({ job })
|
||||
end
|
||||
|
||||
return lines
|
||||
end
|
||||
|
||||
|
|
|
@ -217,16 +217,13 @@ function Task:spawn(cmd, opts)
|
|||
self._running:suspend()
|
||||
|
||||
local running = true
|
||||
local ret = true
|
||||
local ret = { ok = true, output = "" }
|
||||
---@param output string
|
||||
function opts.on_exit(ok, output)
|
||||
if not headless then
|
||||
self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR)
|
||||
end
|
||||
if on_exit then
|
||||
pcall(on_exit, ok, output)
|
||||
end
|
||||
ret = ok
|
||||
ret = { ok = ok, output = output }
|
||||
running = false
|
||||
self._running:resume()
|
||||
end
|
||||
|
@ -241,7 +238,11 @@ function Task:spawn(cmd, opts)
|
|||
Process.spawn(cmd, opts)
|
||||
coroutine.yield()
|
||||
assert(not running, "process still running?")
|
||||
return ret
|
||||
if on_exit then
|
||||
pcall(on_exit, ret.ok, ret.output)
|
||||
end
|
||||
coroutine.yield()
|
||||
return ret.ok
|
||||
end
|
||||
|
||||
function Task:prefix()
|
||||
|
|
Loading…
Reference in New Issue