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)
+1 -1
View File
@@ -170,6 +170,6 @@ function M.complete_glog(arg_lead)
return matches
end
repo.on_uri_refresh(M.URI_PREFIX, populate)
repo.on_uri_change(M.URI_PREFIX, populate)
return M
+1 -1
View File
@@ -428,6 +428,6 @@ function M.open_under_cursor()
return false
end
repo.on_uri_refresh(M.URI_PREFIX, refresh)
repo.on_uri_change(M.URI_PREFIX, refresh)
return M
+1 -1
View File
@@ -671,7 +671,7 @@ local function setup_buffer(bufnr, r, placement, win, invocation_win)
action_help(state[bufnr].placement)
end, "Help")
state[bufnr].unsubscribe = r:on("refresh", function()
state[bufnr].unsubscribe = r:on("change", function()
refresh(bufnr)
end)
vim.api.nvim_create_autocmd("BufEnter", {
+1 -1
View File
@@ -64,7 +64,7 @@ local function update_buf(buf, r)
set_status(buf, r, rel)
end
repo.on("refresh", function(r)
repo.on("change", function(r)
local any_visible = false
for buf in pairs(r.buffers) do
if vim.api.nvim_buf_is_loaded(buf) then
+1 -1
View File
@@ -7,7 +7,7 @@ local Decorator = require("nvim-tree.api").Decorator
local repo = require("git.core.repo")
repo.on("refresh", function()
repo.on("change", function()
require("nvim-tree.api").tree.reload()
end)
+2 -2
View File
@@ -233,7 +233,7 @@ t.test("refresh emits change.paths listing structurally-changed paths", function
t.write(dir, "a", "2")
---@type ow.Git.Repo.Change?
local change_seen
local unsub = r:on("refresh", function(change)
local unsub = r:on("change", function(change)
change_seen = change
end)
r:refresh()
@@ -263,7 +263,7 @@ t.test("submodule: eagerly creates child Repos and subscribes by default", funct
t.write(outer_path .. "/sub", "a", "modified\n")
---@type ow.Git.Repo.Change?
local outer_change
local unsub = outer:on("refresh", function(change)
local unsub = outer:on("change", function(change)
outer_change = change
end)
inner:refresh()