refactor(git): rename refresh event to change, gate on actual diff
This commit is contained in:
+18
-9
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user