diff --git a/lua/git/core/repo.lua b/lua/git/core/repo.lua index e29b805..26e7a1c 100644 --- a/lua/git/core/repo.lua +++ b/lua/git/core/repo.lua @@ -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 +---@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 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) diff --git a/lua/git/log_view.lua b/lua/git/log_view.lua index 3d39f10..a65735a 100644 --- a/lua/git/log_view.lua +++ b/lua/git/log_view.lua @@ -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 diff --git a/lua/git/object.lua b/lua/git/object.lua index 7c33ff9..4f71898 100644 --- a/lua/git/object.lua +++ b/lua/git/object.lua @@ -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 diff --git a/lua/git/status_view.lua b/lua/git/status_view.lua index 45dda2d..18bc6cf 100644 --- a/lua/git/status_view.lua +++ b/lua/git/status_view.lua @@ -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", { diff --git a/lua/git/statusline.lua b/lua/git/statusline.lua index 33592e7..d779c53 100644 --- a/lua/git/statusline.lua +++ b/lua/git/statusline.lua @@ -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 diff --git a/plugins/nvim-tree.lua b/plugins/nvim-tree.lua index bc18a9a..6ba4b0d 100644 --- a/plugins/nvim-tree.lua +++ b/plugins/nvim-tree.lua @@ -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) diff --git a/test/git/repo_test.lua b/test/git/repo_test.lua index a66e689..48a77fe 100644 --- a/test/git/repo_test.lua +++ b/test/git/repo_test.lua @@ -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()