refactor(git): rename refresh event to change, gate on actual diff
This commit is contained in:
+17
-8
@@ -21,7 +21,7 @@ end
|
|||||||
---@field index_mode string?
|
---@field index_mode string?
|
||||||
|
|
||||||
---@alias ow.Git.Repo.Event
|
---@alias ow.Git.Repo.Event
|
||||||
---| "refresh"
|
---| "change"
|
||||||
|
|
||||||
local global = util.Emitter.new()
|
local global = util.Emitter.new()
|
||||||
|
|
||||||
@@ -42,6 +42,7 @@ end
|
|||||||
|
|
||||||
---@class ow.Git.Repo.Change
|
---@class ow.Git.Repo.Change
|
||||||
---@field paths table<string, true>
|
---@field paths table<string, true>
|
||||||
|
---@field branch_changed boolean
|
||||||
|
|
||||||
---@class ow.Git.Repo.RefreshOpts
|
---@class ow.Git.Repo.RefreshOpts
|
||||||
---@field invalidate boolean?
|
---@field invalidate boolean?
|
||||||
@@ -196,6 +197,7 @@ function Repo:_fetch_status()
|
|||||||
self._pending_invalidate = false
|
self._pending_invalidate = false
|
||||||
end
|
end
|
||||||
local prior_entries = self.status.entries
|
local prior_entries = self.status.entries
|
||||||
|
local prior_branch = self.status.branch
|
||||||
self._fetch_epoch = self._fetch_epoch + 1
|
self._fetch_epoch = self._fetch_epoch + 1
|
||||||
local epoch = self._fetch_epoch
|
local epoch = self._fetch_epoch
|
||||||
util.git(STATUS_ARGS, {
|
util.git(STATUS_ARGS, {
|
||||||
@@ -217,9 +219,16 @@ function Repo:_fetch_status()
|
|||||||
prior_entries,
|
prior_entries,
|
||||||
self.status.entries
|
self.status.entries
|
||||||
),
|
),
|
||||||
|
branch_changed = not vim.deep_equal(
|
||||||
|
prior_branch,
|
||||||
|
self.status.branch
|
||||||
|
),
|
||||||
}
|
}
|
||||||
self._events:emit("refresh", change, self.status)
|
if next(change.paths) == nil and not change.branch_changed then
|
||||||
global:emit("refresh", self, change, self.status)
|
return
|
||||||
|
end
|
||||||
|
self._events:emit("change", change, self.status)
|
||||||
|
global:emit("change", self, change, self.status)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
@@ -337,7 +346,7 @@ function Repo:_register_submodule(name)
|
|||||||
end
|
end
|
||||||
self._submodules[name] = {
|
self._submodules[name] = {
|
||||||
worktree = wt,
|
worktree = wt,
|
||||||
unsub = child:on("refresh", function()
|
unsub = child:on("change", function()
|
||||||
self:refresh()
|
self:refresh()
|
||||||
end),
|
end),
|
||||||
}
|
}
|
||||||
@@ -479,7 +488,7 @@ function Repo:close()
|
|||||||
self._events:clear()
|
self._events:clear()
|
||||||
end
|
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)
|
function Repo:on(event, fn)
|
||||||
return self._events:on(event, fn)
|
return self._events:on(event, fn)
|
||||||
end
|
end
|
||||||
@@ -636,7 +645,7 @@ end
|
|||||||
---@type table<string, true>
|
---@type table<string, true>
|
||||||
local no_repo_dirs = {}
|
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)
|
function M.on(event, fn)
|
||||||
return global:on(event, fn)
|
return global:on(event, fn)
|
||||||
end
|
end
|
||||||
@@ -644,8 +653,8 @@ end
|
|||||||
---@param prefix string
|
---@param prefix string
|
||||||
---@param fn fun(buf: integer, r: ow.Git.Repo)
|
---@param fn fun(buf: integer, r: ow.Git.Repo)
|
||||||
---@return fun() unsubscribe
|
---@return fun() unsubscribe
|
||||||
function M.on_uri_refresh(prefix, fn)
|
function M.on_uri_change(prefix, fn)
|
||||||
return M.on("refresh", function(r)
|
return M.on("change", function(r)
|
||||||
for buf in pairs(r.buffers) do
|
for buf in pairs(r.buffers) do
|
||||||
if vim.api.nvim_buf_is_loaded(buf) then
|
if vim.api.nvim_buf_is_loaded(buf) then
|
||||||
local name = vim.api.nvim_buf_get_name(buf)
|
local name = vim.api.nvim_buf_get_name(buf)
|
||||||
|
|||||||
@@ -170,6 +170,6 @@ function M.complete_glog(arg_lead)
|
|||||||
return matches
|
return matches
|
||||||
end
|
end
|
||||||
|
|
||||||
repo.on_uri_refresh(M.URI_PREFIX, populate)
|
repo.on_uri_change(M.URI_PREFIX, populate)
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
+1
-1
@@ -428,6 +428,6 @@ function M.open_under_cursor()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
repo.on_uri_refresh(M.URI_PREFIX, refresh)
|
repo.on_uri_change(M.URI_PREFIX, refresh)
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
@@ -671,7 +671,7 @@ local function setup_buffer(bufnr, r, placement, win, invocation_win)
|
|||||||
action_help(state[bufnr].placement)
|
action_help(state[bufnr].placement)
|
||||||
end, "Help")
|
end, "Help")
|
||||||
|
|
||||||
state[bufnr].unsubscribe = r:on("refresh", function()
|
state[bufnr].unsubscribe = r:on("change", function()
|
||||||
refresh(bufnr)
|
refresh(bufnr)
|
||||||
end)
|
end)
|
||||||
vim.api.nvim_create_autocmd("BufEnter", {
|
vim.api.nvim_create_autocmd("BufEnter", {
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ local function update_buf(buf, r)
|
|||||||
set_status(buf, r, rel)
|
set_status(buf, r, rel)
|
||||||
end
|
end
|
||||||
|
|
||||||
repo.on("refresh", function(r)
|
repo.on("change", function(r)
|
||||||
local any_visible = false
|
local any_visible = false
|
||||||
for buf in pairs(r.buffers) do
|
for buf in pairs(r.buffers) do
|
||||||
if vim.api.nvim_buf_is_loaded(buf) then
|
if vim.api.nvim_buf_is_loaded(buf) then
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ local Decorator = require("nvim-tree.api").Decorator
|
|||||||
|
|
||||||
local repo = require("git.core.repo")
|
local repo = require("git.core.repo")
|
||||||
|
|
||||||
repo.on("refresh", function()
|
repo.on("change", function()
|
||||||
require("nvim-tree.api").tree.reload()
|
require("nvim-tree.api").tree.reload()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ t.test("refresh emits change.paths listing structurally-changed paths", function
|
|||||||
t.write(dir, "a", "2")
|
t.write(dir, "a", "2")
|
||||||
---@type ow.Git.Repo.Change?
|
---@type ow.Git.Repo.Change?
|
||||||
local change_seen
|
local change_seen
|
||||||
local unsub = r:on("refresh", function(change)
|
local unsub = r:on("change", function(change)
|
||||||
change_seen = change
|
change_seen = change
|
||||||
end)
|
end)
|
||||||
r:refresh()
|
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")
|
t.write(outer_path .. "/sub", "a", "modified\n")
|
||||||
---@type ow.Git.Repo.Change?
|
---@type ow.Git.Repo.Change?
|
||||||
local outer_change
|
local outer_change
|
||||||
local unsub = outer:on("refresh", function(change)
|
local unsub = outer:on("change", function(change)
|
||||||
outer_change = change
|
outer_change = change
|
||||||
end)
|
end)
|
||||||
inner:refresh()
|
inner:refresh()
|
||||||
|
|||||||
Reference in New Issue
Block a user