refactor(git): rename refresh event to change, gate on actual diff

This commit is contained in:
2026-05-19 10:42:13 +02:00
parent 085216a406
commit ab9b70c70a
7 changed files with 25 additions and 16 deletions
+18 -9
View File
@@ -20,8 +20,8 @@ end
---@field index_writer boolean?
---@field index_mode string?
---@alias ow.Git.Repo.Event
---| "refresh"
---@alias ow.Git.Repo.Event
---| "change"
local global = util.Emitter.new()
@@ -42,6 +42,7 @@ end
---@class ow.Git.Repo.Change
---@field paths table<string, true>
---@field branch_changed boolean
---@class ow.Git.Repo.RefreshOpts
---@field invalidate boolean?
@@ -196,6 +197,7 @@ function Repo:_fetch_status()
self._pending_invalidate = false
end
local prior_entries = self.status.entries
local prior_branch = self.status.branch
self._fetch_epoch = self._fetch_epoch + 1
local epoch = self._fetch_epoch
util.git(STATUS_ARGS, {
@@ -217,9 +219,16 @@ function Repo:_fetch_status()
prior_entries,
self.status.entries
),
branch_changed = not vim.deep_equal(
prior_branch,
self.status.branch
),
}
self._events:emit("refresh", change, self.status)
global:emit("refresh", self, change, self.status)
if next(change.paths) == nil and not change.branch_changed then
return
end
self._events:emit("change", change, self.status)
global:emit("change", self, change, self.status)
end,
})
end
@@ -337,7 +346,7 @@ function Repo:_register_submodule(name)
end
self._submodules[name] = {
worktree = wt,
unsub = child:on("refresh", function()
unsub = child:on("change", function()
self:refresh()
end),
}
@@ -479,7 +488,7 @@ function Repo:close()
self._events:clear()
end
---@overload fun(event: "refresh", fn: fun(change: ow.Git.Repo.Change, status: ow.Git.Status)): fun()
---@overload fun(event: "change", fn: fun(change: ow.Git.Repo.Change, status: ow.Git.Status)): fun()
function Repo:on(event, fn)
return self._events:on(event, fn)
end
@@ -636,7 +645,7 @@ end
---@type table<string, true>
local no_repo_dirs = {}
---@overload fun(event: "refresh", fn: fun(r: ow.Git.Repo, change: ow.Git.Repo.Change, status: ow.Git.Status)): fun()
---@overload fun(event: "change", fn: fun(r: ow.Git.Repo, change: ow.Git.Repo.Change, status: ow.Git.Status)): fun()
function M.on(event, fn)
return global:on(event, fn)
end
@@ -644,8 +653,8 @@ end
---@param prefix string
---@param fn fun(buf: integer, r: ow.Git.Repo)
---@return fun() unsubscribe
function M.on_uri_refresh(prefix, fn)
return M.on("refresh", function(r)
function M.on_uri_change(prefix, fn)
return M.on("change", function(r)
for buf in pairs(r.buffers) do
if vim.api.nvim_buf_is_loaded(buf) then
local name = vim.api.nvim_buf_get_name(buf)