Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Neogit starts producing errors when calling neogit.open twice from different pwd, OR when using a zsh terminal that runs the powerlevel10k theme #1385

Open
tvsfx opened this issue Jun 18, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@tvsfx
Copy link

tvsfx commented Jun 18, 2024

Description

I start getting errors in the following cases:

  • I open the Neogit status buffer when it is already open, using the neogit.open command twice, when the cwd is not inside the project that my buffer is in
  • I open the neogit status buffer for a specific project, and then open a zsh+powerleve10k terminal under a different cwd,

Neovim version

v0.10.0
(Neogit: 11dea1b )

Operating system and version

Ubuntu 20.04

Steps to reproduce

Self-variant

  1. From $HOME, run nvim -u minimal.lua
  2. Navigate to a random file, let's say random, in a random git repo without changing pwd (e.g. :e <path-to-random>)
  3. Type \gs (keybind defined below) to call Neogit status for the repo containing the current file's folder.
  4. Click back on tab that contains random
  5. Repeat step 3
  6. Error occurs

Shell variant (requires zsh/powerlevel10k)
<Repeat steps 1-4 above>
5. open a terminal under the new CWD using :edit term://%:p:h//zsh
6. Error occurs

Expected behavior

No response

Actual behavior

The error trace is as follows:

E5108: Error executing lua: ...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:18: The coroutine failed with this message: ...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:18: The coroutine failed with this message: ...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:18: The coroutine failed with this message: ...ing/.min/plugins/neogit/lua/neogit/lib/git/sequencer.lua:50: attempt to index local 'HEAD_oid' (a nil value)
stack traceback:
	[C]: in function 'error'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:18: in function 'callback_or_next'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:45: in function 'callback'
	...ering/.min/plugins/plenary/lua/plenary/async/control.lua:101: in function 'returned_function'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:31: in function 'callback_or_next'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:45: in function 'step'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:48: in function 'execute'
	...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:118: in function <...nkering/.min/plugins/plenary/lua/plenary/async/async.lua:117>
	...nts/General/Tinkering/.min/plugins/neogit/lua/neogit.lua:129: in function 'open_status_buffer'
	...nts/General/Tinkering/.min/plugins/neogit/lua/neogit.lua:193: in function 'open'
	.../Documents/General/Tinkering/minimal.lua:88: in function <.../Documents/General/Tinkering/minimal.lua:87>

Tested using minimal.lua, and I still get the error. For the shell variant; I do not get the error when I switch to bash or when I turn my zsh theme off. I assume this has to do with the fact that powershell10k has its own git status overview, which somehow interferes with neogit.

Minimal config

-- NOTE: See the end of this file if you are reporting an issue, etc. Ignore all the "scary" functions up top, those are
-- used for setup and other operations.
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

-- NOTE: If you have additional plugins you need to install to reproduce your issue, include them in the plugins
-- table within the setup call below.
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",
})
-- WARN: Do all plugin setup, test runs, reproductions, etc. AFTER calling setup with a list of plugins!
-- Basically, do all that stuff AFTER this line.
local neogit = require("neogit")

neogit.setup({}) -- For instance, setup Neogit

vim.keymap.set("n", "<leader>gs", function()
	neogit.open({ cwd = "%:p:h", kind = "tab" })
end, { desc = "neogit-status" })
@tvsfx tvsfx added the bug Something isn't working label Jun 18, 2024
@tvsfx tvsfx changed the title Neogit starts producing errors when calling neogit.open twice, OR when using a zsh terminal that runs the powerlevel10k theme Neogit starts producing errors when calling neogit.open twice from different pwd, OR when using a zsh terminal that runs the powerlevel10k theme Jun 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant