diff options
author | Squibid <me@zacharyscheiman.com> | 2024-07-27 09:26:54 -0400 |
---|---|---|
committer | Squibid <me@zacharyscheiman.com> | 2024-07-27 09:26:54 -0400 |
commit | 16f32bdcdd10c3dc95519b5f0ab4d6818b3a3bfe (patch) | |
tree | 6edc384d7e72662dc1e58f0722353ce841f891cc /proc.lua | |
parent | 878f0faaf7f472b96ab5a7f0e4db266111b2d3ce (diff) | |
download | eat-it-16f32bdcdd10c3dc95519b5f0ab4d6818b3a3bfe.tar.gz eat-it-16f32bdcdd10c3dc95519b5f0ab4d6818b3a3bfe.tar.bz2 eat-it-16f32bdcdd10c3dc95519b5f0ab4d6818b3a3bfe.zip |
complete refactor see README for more infov3.0
Diffstat (limited to '')
-rw-r--r-- | proc.lua | 85 |
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 |