diff --git a/doc/gitsigns.txt b/doc/gitsigns.txt index 00050a350..a5bf5f304 100644 --- a/doc/gitsigns.txt +++ b/doc/gitsigns.txt @@ -1167,8 +1167,8 @@ like so: >lua vim.api.nvim_create_autocmd('User', { pattern = 'GitSignsUpdate', - callback = function() - print(os.time() .. ' Gitsigns made an update') + callback = function(args) + print(os.time(), ' Gitsigns made an update on ', args.data.buffer) end }) diff --git a/etc/doc_template.txt b/etc/doc_template.txt index 9083057a5..13233e90d 100644 --- a/etc/doc_template.txt +++ b/etc/doc_template.txt @@ -171,8 +171,8 @@ like so: >lua vim.api.nvim_create_autocmd('User', { pattern = 'GitSignsUpdate', - callback = function() - print(os.time() .. ' Gitsigns made an update') + callback = function(args) + print(os.time(), ' Gitsigns made an update on ', args.data.buffer) end }) diff --git a/lua/gitsigns.lua b/lua/gitsigns.lua index 867ce205d..a157684d3 100644 --- a/lua/gitsigns.lua +++ b/lua/gitsigns.lua @@ -57,6 +57,12 @@ local function update_cwd_head() end async.scheduler() + + api.nvim_exec_autocmds('User', { + pattern = 'GitSignsUpdate', + modeline = false, + }) + vim.g.gitsigns_head = head if not gitdir then diff --git a/lua/gitsigns/manager.lua b/lua/gitsigns/manager.lua index f0a9a000a..d9b4adebb 100644 --- a/lua/gitsigns/manager.lua +++ b/lua/gitsigns/manager.lua @@ -521,16 +521,11 @@ M.update = throttle_by_id(function(bufnr) update_show_deleted(bufnr) bcache.force_next_update = false - api.nvim_exec_autocmds('User', { - pattern = 'GitSignsUpdate', - modeline = false, - }) + local summary = gs_hunks.get_summary(bcache.hunks) + summary.head = git_obj.repo.abbrev_head + Status:update(bufnr, summary) end - local summary = gs_hunks.get_summary(bcache.hunks) - summary.head = git_obj.repo.abbrev_head - Status:update(bufnr, summary) - update_cnt = update_cnt + 1 dprintf('updates: %s, jobs: %s', update_cnt, system.job_cnt) diff --git a/lua/gitsigns/status.lua b/lua/gitsigns/status.lua index 0aca1960c..062f6baa7 100644 --- a/lua/gitsigns/status.lua +++ b/lua/gitsigns/status.lua @@ -10,6 +10,15 @@ local api = vim.api local M = {} +--- @param bufnr integer +local function autocmd_update(bufnr) + api.nvim_exec_autocmds('User', { + pattern = 'GitSignsUpdate', + modeline = false, + data = { buffer = bufnr }, + }) +end + --- @param bufnr integer --- @param status Gitsigns.StatusObj function M:update(bufnr, status) @@ -26,6 +35,8 @@ function M:update(bufnr, status) local config = require('gitsigns.config').config vim.b[bufnr].gitsigns_status = config.status_formatter(status) + + autocmd_update(bufnr) end function M:clear(bufnr) @@ -35,10 +46,7 @@ function M:clear(bufnr) vim.b[bufnr].gitsigns_head = nil vim.b[bufnr].gitsigns_status_dict = nil vim.b[bufnr].gitsigns_status = nil -end - -function M:clear_diff(bufnr) - self:update(bufnr, { added = 0, removed = 0, changed = 0 }) + autocmd_update(bufnr) end return M diff --git a/test/actions_spec.lua b/test/actions_spec.lua index 4debf124d..e7b98cc6d 100644 --- a/test/actions_spec.lua +++ b/test/actions_spec.lua @@ -254,20 +254,19 @@ describe('actions', function() eq(pos, helpers.api.nvim_win_get_cursor(0)) end - check_cursor({6,0}) + check_cursor({ 6, 0 }) command('Gitsigns next_hunk') -- Wrap - check_cursor({1,0}) + check_cursor({ 1, 0 }) command('Gitsigns next_hunk') - check_cursor({4,0}) + check_cursor({ 4, 0 }) command('Gitsigns next_hunk') - check_cursor({6,0}) + check_cursor({ 6, 0 }) command('Gitsigns prev_hunk') - check_cursor({4,0}) + check_cursor({ 4, 0 }) command('Gitsigns prev_hunk') - check_cursor({1,0}) + check_cursor({ 1, 0 }) command('Gitsigns prev_hunk') -- Wrap - check_cursor({6,0}) - + check_cursor({ 6, 0 }) end) end)