From 25372aea36cef2a094b1a0d8f83e0199734944f6 Mon Sep 17 00:00:00 2001 From: Squibid Date: Tue, 19 Nov 2024 12:36:55 -0600 Subject: add ability to specifiy commit ref --- README.md | 4 ++++ lua/dep.lua | 28 +++++++++++++++++++++++----- lua/dep/proc.lua | 10 ++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a77c576..d3991af 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,10 @@ A package must be declared in the following format. -- Defaults to whatever the remote configured as their HEAD, which is usually "master". branch = "develop", + -- [string] Overrides the commit ref to target + -- Defaults to the latest commit on the current branch + commit = "e76cb03", + -- [boolean] Prevents the package from being loaded. disable = true, diff --git a/lua/dep.lua b/lua/dep.lua index 378ef82..911ceca 100644 --- a/lua/dep.lua +++ b/lua/dep.lua @@ -78,6 +78,7 @@ local function register(spec, overrides) package.url = spec.url or package.url or ("https://github.com/" .. id .. ".git") package.branch = spec.branch or package.branch package.dir = base_dir .. package.name + package.commit = spec.commit package.pin = overrides.pin or spec.pin or package.pin package.enabled = not overrides.disable and not spec.disable and package.enabled @@ -493,7 +494,7 @@ local function sync(package, cb) log_err(before) cb(err) else - proc.git_fetch(package.dir, "origin", package.branch or "HEAD", function(err, message) + local function continue(err, message) if err then log_err(message) cb(err) @@ -519,7 +520,12 @@ local function sync(package, cb) end end) end - end) + end + if package.commit then + proc.git_checkout(package.dir, package.branch, package.commit, continue) + else + proc.git_fetch(package.dir, "origin", package.branch or "HEAD", continue) + end end end) else @@ -527,9 +533,21 @@ local function sync(package, cb) if err then logger:log("error", string.format("failed to install %s; reason: %s", package.id, message)) else - package.exists = true - mark_reconfigure(package) - logger:log("install", string.format("installed %s", package.id)) + if package.commit then + proc.git_checkout(package.dir, package.branch, package.commit, function(err, message) + if err then + logger:log("error", string.format("failed to checkout %s; reason: %s", package.id, message)) + else + package.exists = true + mark_reconfigure(package) + logger:log("install", string.format("installed %s", package.id)) + end + end) + else + package.exists = true + mark_reconfigure(package) + logger:log("install", string.format("installed %s", package.id)) + end end cb(err) diff --git a/lua/dep/proc.lua b/lua/dep/proc.lua index 4b95baa..3355228 100644 --- a/lua/dep/proc.lua +++ b/lua/dep/proc.lua @@ -61,4 +61,14 @@ function proc.git_reset(dir, treeish, cb) proc.exec("git", args, dir, git_env, cb) end +function proc.git_checkout(dir, branch, commit, cb) + local args = { "fetch", "--unshallow", "origin", branch } + proc.exec("git", args, dir, git_env, function(err, message) + cb(err, message) + + args = { "checkout", commit } + proc.exec("git", args, dir, git_env, cb) + end) +end + return proc -- cgit v1.2.1