aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lua/dep/proc.lua74
1 files changed, 27 insertions, 47 deletions
diff --git a/lua/dep/proc.lua b/lua/dep/proc.lua
index 0082239..4b95baa 100644
--- a/lua/dep/proc.lua
+++ b/lua/dep/proc.lua
@@ -2,56 +2,36 @@ local logger = require("dep.log").global
local proc = {}
function proc.exec(process, args, cwd, env, cb)
- local handle, pid, buffer = nil, nil, {}
- local stdout = vim.loop.new_pipe()
- local stderr = vim.loop.new_pipe()
+ local buffer = {}
- handle, pid = vim.loop.spawn(
- process,
- { 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
-
- logger:log(
- process,
- string.format(
- 'executed `%s` (code=%s, pid=%s) with args: "%s"\n%s',
- process,
- code,
- pid,
- table.concat(args, '", "'),
- 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)
-
- vim.loop.read_start(stderr, function(_, data)
- if data then
- buffer[#buffer + 1] = data
- else
- stderr:close()
- end
- end)
+ local function cb_output(_, data, _)
+ table.insert(buffer, table.concat(data))
+ end
+ local function cb_exit(job_id, exit_code, _)
+ local output = table.concat(buffer)
+ logger:log(
+ process,
+ string.format(
+ 'Job %s ["%s"] finished with exitcode %s\n%s',
+ job_id,
+ table.concat(args, '", "'),
+ exit_code,
+ output)
+ )
+ cb(exit_code ~= 0, output)
+ end
+ table.insert(args, 1, process)
+ vim.fn.jobstart(args, {
+ cwd = cwd,
+ env = env,
+ stdin = nil,
+ on_exit = cb_exit,
+ on_stdout = cb_output,
+ on_stderr = cb_output,
+ })
end
-local git_env = { "GIT_TERMINAL_PROMPT=0" }
+local git_env = { GIT_TERMINAL_PROMPT = 0 }
function proc.git_rev_parse(dir, arg, cb)
local args = { "rev-parse", "--short", arg }