fix(git): properly compare git commits with short refs

This commit is contained in:
Folke Lemaitre 2023-01-03 09:36:35 +01:00
parent 3ad6d95a30
commit dc9c92a9b3
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
3 changed files with 11 additions and 3 deletions

View File

@ -22,7 +22,7 @@ function M.fast_check(opts)
plugin._.updates = nil plugin._.updates = nil
local info = Git.info(plugin.dir) local info = Git.info(plugin.dir)
local ok, target = pcall(Git.get_target, plugin) local ok, target = pcall(Git.get_target, plugin)
if ok and info and target and info.commit ~= target.commit then if ok and info and target and not Git.eq(info, target) then
plugin._.updates = { from = info, to = target } plugin._.updates = { from = info, to = target }
end end
end end

View File

@ -32,6 +32,14 @@ function M.info(repo, details)
end end
end end
---@param a GitInfo
---@param b GitInfo
function M.eq(a, b)
local ra = a.commit and a.commit:sub(1, 7)
local rb = b.commit and b.commit:sub(1, 7)
return ra == rb
end
function M.head(repo) function M.head(repo)
return Util.head(repo .. "/.git/HEAD") return Util.head(repo .. "/.git/HEAD")
end end

View File

@ -41,7 +41,7 @@ M.log = {
error("no target commit found") error("no target commit found")
end end
assert(target.commit, self.plugin.name .. " " .. target.branch) assert(target.commit, self.plugin.name .. " " .. target.branch)
if target.commit ~= info.commit then if not Git.eq(info, target) then
self.plugin._.updates = { from = info, to = target } self.plugin._.updates = { from = info, to = target }
end end
table.insert(args, info.commit .. ".." .. target.commit) table.insert(args, info.commit .. ".." .. target.commit)
@ -165,7 +165,7 @@ M.checkout = {
-- dont run checkout if target is already reached. -- dont run checkout if target is already reached.
-- unless we just cloned, since then we won't have any data yet -- unless we just cloned, since then we won't have any data yet
if info.commit == target.commit and info.branch == target.branch then if Git.eq(info, target) and info.branch == target.branch then
self.plugin._.updated = { self.plugin._.updated = {
from = info.commit, from = info.commit,
to = info.commit, to = info.commit,