Skip to content

Error on staging when setting process_spinner=true #1944

@kunzaatko

Description

@kunzaatko

Description

Image

The error that I am getting:

E5108: Error executing lua: ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:18: The coroutine failed with this message: Vim:Lua callback: ...unz/.local/share/nvim/lazy/neogit/lua/neogit/spinner.lua:84: invalid key: kind
stack traceback:
        [C]: in function 'nvim_echo'
        ...unz/.local/share/nvim/lazy/neogit/lua/neogit/spinner.lua:84: in function 'stop'
        ...unz/.local/share/nvim/lazy/neogit/lua/neogit/process.lua:148: in function 'hide_spinner'
        ...unz/.local/share/nvim/lazy/neogit/lua/neogit/process.lua:344: in function <...unz/.local/share/nvim/lazy/neogit/lua/neogit/process.lua:336>
        [C]: in function 'resume'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:45: in function 'step'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:48: in function 'execute'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:118: in function 'cb'
        .../.local/share/nvim/lazy/neogit/lua/neogit/lib/buffer.lua:778: in function <.../.local/share/nvim/lazy/neogit/lua/neogit/lib/buffer.lua:777>
stack traceback:
        [C]: in function 'error'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:18: in function 'callback_or_next'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:45: in function 'step'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:48: in function 'execute'
        ...ocal/share/nvim/lazy/plenary/lua/plenary/async/async.lua:118: in function 'cb'
        .../.local/share/nvim/lazy/neogit/lua/neogit/lib/buffer.lua:778: in function <.../.local/share/nvim/lazy/neogit/lua/neogit/lib/buffer.lua:777>

Neovim version

NVIM v0.11.6
Build type: Release
LuaJIT 2.1.1741730670

Operating system and version

macOS 26.3 (25D125) Kernel Version: Darwin 25.3.0

Steps to reproduce

  1. nvim -nu minimal.lua
  2. Try to stage a file or a patch

Expected behavior

Spinner or no spinner while staging

Actual behavior

The staging triggers an error

Minimal config

local M = {}

local base_root_path = vim.fn.fnamemodify(debug.getinfo(1, 'S').source:sub(2), ':p:h') .. '/.min'
function M.root(path)
  return base_root_path .. '/' .. (path or '')
end

function M.load_plugin(plugin_name, plugin_url)
  local package_root = M.root 'plugins/'
  local install_destination = package_root .. plugin_name
  vim.opt.runtimepath:append(install_destination)

  if not vim.loop.fs_stat(package_root) then
    vim.fn.mkdir(package_root, 'p')
  end

  if not vim.loop.fs_stat(install_destination) then
    print(string.format("> Downloading plugin '%s' to '%s'", plugin_name, install_destination))
    vim.fn.system {
      'git',
      'clone',
      '--depth=1',
      plugin_url,
      install_destination,
    }
    if vim.v.shell_error > 0 then
      error(
        string.format("> Failed to clone plugin: '%s' in '%s'!", plugin_name, install_destination),
        vim.log.levels.ERROR
      )
    end
  end
end

---@alias PluginName string The plugin name, will be used as part of the git clone destination
---@alias PluginUrl string The git url at which a plugin is located, can be a path. See https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols for details
---@alias MinPlugins table<PluginName, PluginUrl>

---Do the initial setup. Downloads plugins, ensures the minimal init does not pollute the filesystem by keeping
---everything self contained to the CWD of the minimal init file. Run prior to running tests, reproducing issues, etc.
---@param plugins? table<PluginName, PluginUrl>
function M.setup(plugins)
  vim.opt.packpath = {} -- Empty the package path so we use only the plugins specified
  vim.opt.runtimepath:append(M.root '.min') -- Ensure the runtime detects the root min dir

  -- Install required plugins
  if plugins ~= nil then
    for plugin_name, plugin_url in pairs(plugins) do
      M.load_plugin(plugin_name, plugin_url)
    end
  end

  vim.env.XDG_CONFIG_HOME = M.root 'xdg/config'
  vim.env.XDG_DATA_HOME = M.root 'xdg/data'
  vim.env.XDG_STATE_HOME = M.root 'xdg/state'
  vim.env.XDG_CACHE_HOME = M.root 'xdg/cache'

  -- NOTE: Cleanup the xdg cache on exit so new runs of the minimal init doesn't share any previous state, e.g. shada
  vim.api.nvim_create_autocmd('VimLeave', {
    callback = function()
      vim.fn.system {
        'rm',
        '-r',
        '-f',
        M.root 'xdg',
      }
    end,
  })
end

M.setup {
  plenary = 'https://github.com/nvim-lua/plenary.nvim.git',
  telescope = 'https://github.com/nvim-telescope/telescope.nvim',
  diffview = 'https://github.com/sindrets/diffview.nvim',
  neogit = 'https://github.com/NeogitOrg/neogit',
}
require('neogit').setup {
  process_spinner = true,
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions