replace vim.loop.spawn with vim.fn.jobstart -- taken from xlucn on

github
This commit is contained in:
2023-04-29 11:04:14 -04:00
parent e08bfe10d0
commit 36db96d397

View File

@ -2,56 +2,36 @@ local logger = require("dep.log").global
local proc = {} local proc = {}
function proc.exec(process, args, cwd, env, cb) function proc.exec(process, args, cwd, env, cb)
local handle, pid, buffer = nil, nil, {} local buffer = {}
local stdout = vim.loop.new_pipe()
local stderr = vim.loop.new_pipe()
handle, pid = vim.loop.spawn( local function cb_output(_, data, _)
process, table.insert(buffer, table.concat(data))
{ args = args, cwd = cwd, env = env, stdio = { nil, stdout, stderr } },
vim.schedule_wrap(function(code)
handle:close()
local output = table.concat(buffer)
if output:sub(-1) == "\n" then
output = output:sub(1, -2)
end end
local function cb_exit(job_id, exit_code, _)
local output = table.concat(buffer)
logger:log( logger:log(
process, process,
string.format( string.format(
'executed `%s` (code=%s, pid=%s) with args: "%s"\n%s', 'Job %s ["%s"] finished with exitcode %s\n%s',
process, job_id,
code,
pid,
table.concat(args, '", "'), table.concat(args, '", "'),
output exit_code,
output)
) )
) cb(exit_code ~= 0, output)
cb(code ~= 0, output)
end)
)
vim.loop.read_start(stdout, function(_, data)
if data then
buffer[#buffer + 1] = data
else
stdout:close()
end end
end) table.insert(args, 1, process)
vim.fn.jobstart(args, {
vim.loop.read_start(stderr, function(_, data) cwd = cwd,
if data then env = env,
buffer[#buffer + 1] = data stdin = nil,
else on_exit = cb_exit,
stderr:close() on_stdout = cb_output,
end on_stderr = cb_output,
end) })
end end
local git_env = { "GIT_TERMINAL_PROMPT=0" } local git_env = { GIT_TERMINAL_PROMPT = 0 }
function proc.git_rev_parse(dir, arg, cb) function proc.git_rev_parse(dir, arg, cb)
local args = { "rev-parse", "--short", arg } local args = { "rev-parse", "--short", arg }