Incompatibility with fugitive and oil.nvim and other plugins
pedro757 opened this issue · comments
Description
Error detected while processing BufEnter Autocommands for "*":
Error executing lua callback: ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: bad argument #1 to 'fs_stat' (string expected, got nil)
stack traceback:
[C]: in function 'fs_stat'
...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: in function 'get_toplevel'
...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:222: in function 'load_project_status'
.../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:38: in function '_load'
.../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:30: in function 'new'
...cal/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/core.lua:20: in function 'init'
.../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:88: in function 'f'
.../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:77: in function 'force_dirchange'
...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:104: in function <...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:92>
Neovim version
NVIM v0.10.0-dev-2507+g3df1211eb
Build type: RelWithDebInfo
LuaJIT 2.1.1707061634
Run "nvim -V1 -v" for more info
Operating system and version
Linux 6.1.77-2
Windows variant
No response
nvim-tree version
Clean room replication
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.cmd [[set runtimepath=$VIMRUNTIME]]
vim.cmd [[set packpath=/tmp/nvt-min/site]]
local package_root = "/tmp/nvt-min/site/pack"
local install_path = package_root .. "/packer/start/packer.nvim"
local function load_plugins()
require("packer").startup {
{
"wbthomason/packer.nvim",
"nvim-tree/nvim-tree.lua",
"nvim-tree/nvim-web-devicons",
"tpope/vim-fugitive",
"stevearc/oil.nvim",
-- ADD PLUGINS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE
},
config = {
package_root = package_root,
compile_path = install_path .. "/plugin/packer_compiled.lua",
display = { non_interactive = true },
},
}
end
if vim.fn.isdirectory(install_path) == 0 then
print "Installing nvim-tree and dependencies."
vim.fn.system { "git", "clone", "--depth=1", "https://github.com/wbthomason/packer.nvim", install_path }
end
load_plugins()
require("packer").sync()
vim.cmd [[autocmd User PackerComplete ++once echo "Ready!" | lua setup()]]
vim.opt.termguicolors = true
vim.opt.cursorline = true
-- MODIFY NVIM-TREE SETTINGS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE
_G.setup = function()
require("nvim-tree").setup {}
require("oil").setup()
end
-- UNCOMMENT this block for diagnostics issues, substituting pattern and cmd as appropriate.
-- Requires diagnostics.enable = true in setup.
--[[
vim.api.nvim_create_autocmd("FileType", {
pattern = "lua",
callback = function()
vim.lsp.start { cmd = { "lua-language-server" } }
end,
})
]]
Steps to reproduce
- Run
:G
or:Oil
Expected behavior
Not to error
Actual behavior
Error detected while processing BufEnter Autocommands for "*":
Error executing lua callback: ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: bad argument #1 to 'fs_stat' (string expected, got nil)
stack traceback:
[C]: in function 'fs_stat'
...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: in function 'get_toplevel'
...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:222: in function 'load_project_status'
.../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:38: in function '_load'
.../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:30: in function 'new'
...cal/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/core.lua:20: in function 'init'
.../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:88: in function 'f'
.../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:77: in function 'force_dirchange'
...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:104: in function <...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:92>
Unfortunately I can't reproduce this one with the clean room above, with :Oil or :G
I'm a fugitive user however I haven't seen this one before.
I do note that the stack contains lazy - is that the lazy plugin manager? I'm not seeing that in the replication config...
Can you reproduce without lazy?
I deleted oil:/
and fugitive:/
directories and now works fine, no idea why it works now, thank you
Those directories apparently appear when saving a special buffer of fugitive or oil.nvim https://www.reddit.com/r/vim/comments/17vpwyw/where_do_the_fugitive_folders_come_from_and_how/
I wasn't able to reproduce however the issue is clear. A guard has been added for this case #2696
@pedro757 I'd be most grateful if you reproduced the issue then tested the fix:
cd /path/to/nvim-tree.lua
git pull
git checkout origin/2695-git-toplevel-guard-invalid-path
When you're finished testing:
git checkout master
Sorry it was my fault, I had this autocommand, that created those directories (oil:
and fugitive:
) on save.
vim.api.nvim_create_autocmd("BufWritePre", {
callback = function()
+ if vim.o.filetype == "oil" or vim.o.filetype == "fugitive" then
+ return
+ end
local dir = vim.fn.expand "<afile>:p:h"
if vim.fn.isdirectory(dir) == 0 then
vim.fn.mkdir(dir, "p")
end
end,
})
Just added those lines to prevent that, thank you