aboutsummaryrefslogtreecommitdiffstats
path: root/proc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'proc.lua')
-rw-r--r--proc.lua85
1 files changed, 85 insertions, 0 deletions
diff --git a/proc.lua b/proc.lua
new file mode 100644
index 0000000..306cb2e
--- /dev/null
+++ b/proc.lua
@@ -0,0 +1,85 @@
+-- Copyright (c) 2024 squibid, see LICENSE file for more info
+local mp = require('mp')
+
+local M = {}
+
+--- run a system binary
+---@param args table command with it's options
+---@param env table key value pair of envvars
+---@param cb function callback
+function M.exec(args, env, cb)
+ local res_env = {}
+ for i, v in pairs(env) do
+ res_env[#res_env + 1] = i.."="..v
+ end
+
+ --- run callback
+ ---@param success boolean if the command ran successfully
+ ---@param result table|nil results
+ ---@param error string|nil error string or nil
+ local function callback(success, result, error)
+ local output
+ if result then
+ -- combine both stdout and stderr
+ output = result.stdout..result.stderr
+ end
+ cb(not success, output)
+ end
+
+ mp.command_native_async({
+ name = "subprocess",
+ playback_only = false,
+ capture_stdout = true,
+ capture_stderr = true,
+ env = res_env,
+ args = args
+ }, callback)
+end
+
+---@type table git environment
+local git_env = { GIT_TERMINAL_PROMPT = 0 }
+
+--- git rev parse
+---@param dir string directory
+---@param arg string arg
+---@param cb function callback
+function M.git_rev_parse(dir, arg, cb)
+ local cmd = { "git", "-C", dir, "rev-parse", "--short", arg }
+ M.exec(cmd, git_env, cb)
+end
+
+--- git clone
+---@param dir string directory
+---@param url string url
+---@param branch string branch
+---@param cb function callback
+function M.git_clone(dir, url, branch, cb)
+ local cmd = { "git", "clone", "--depth=1", "--recurse-submodules", "--shallow-submodules", url, dir }
+
+ if branch then
+ cmd[#cmd + 1] = "--branch="..branch
+ end
+
+ M.exec(cmd, git_env, cb)
+end
+
+--- git fetch
+---@param dir string directory
+---@param remote string remote
+---@param refspec string refspec
+---@param cb function callback
+function M.git_fetch(dir, remote, refspec, cb)
+ local cmd = { "git", "-C", dir, "fetch", "--depth=1", "--recurse-submodules", remote, refspec }
+ M.exec(cmd, git_env, cb)
+end
+
+--- git reset
+---@param dir string dir
+---@param treeish string treeish
+---@param cb function callback
+function M.git_reset(dir, treeish, cb)
+ local cmd = { "git", "-C", dir, "reset", "--hard", "--recurse-submodules", treeish, "--" }
+ M.exec(cmd, git_env, cb)
+end
+
+return M