NeogitOrg / neogit

An interactive and powerful Git interface for Neovim, inspired by Magit
MIT License
4.1k stars 242 forks source link

"Go to file" is not working #1419

Closed raaymax closed 4 months ago

raaymax commented 4 months ago

Description

Go to file is not working

https://github.com/user-attachments/assets/0e70f57e-f11f-43bc-b1be-735466b72488

Neovim version

NVIM v0.10.0 Build type: Release LuaJIT 2.1.1716656478

Operating system and version

macOS 14.5

Steps to reproduce

  1. open any repo
  2. edit any file
  3. go to other file
  4. open neogit and press enter on edited file

Expected behavior

neogit should open edited file

Actual behavior

neogit just closes it's window

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.
require("neogit").setup({}) -- For instance, setup Neogit
CKolkey commented 4 months ago

I'm not able to reproduce this - <cr> on a file works for me, and on a hunk going to the correct line.

joshuarubin commented 4 months ago

having the same issue

CKolkey commented 4 months ago

Alright - I've added some logging where it runs the command to open the file: https://github.com/NeogitOrg/neogit/pull/1421

Update to latest master, run NEOGIT_LOG_LEVEL=debug NEOGIT_LOG_FILE=true NEOGIT_DEBUG=true nvim

and find the command run with: tail -n 1000 -f ~/.cache/nvim/neogit.log | grep 'Status - Open'

Lemme know if it looks weird.

kuntau commented 4 months ago

Yeah, this behavior hasn't work for me reliably for like a month. Sometimes it works, sometimes not, but more failed than it's working.

FWIIW, neogit always give notification of the relevant line and just close itself.

kuntau commented 4 months ago

NEOGIT_LOG_LEVEL=debug NEOGIT_LOG_FILE=true NEOGIT_DEBUG=true nvim

Just run a bunch open file from neogit

tail -n 1000 -f ~/.cache/nvim/neogit.log | rg 'Status - Open'

[D 0.30.83 ] buffers/status/actions.lua:63  [Status - Open] 'silent! edit /Users/.../gitconfig | 1 | norm! zz'
[D 0.80.42 ] buffers/status/actions.lua:63  [Status - Open] 'silent! edit /Users/.../nvim/lua/config/plugins/windows.lua | 2 | norm! zz'
[D 1.17.78 ] buffers/status/actions.lua:63  [Status - Open] 'silent! edit /Users/.../nvim/lua/config/ui.lua | 1 | norm! zz'
[D 1.72.25 ] buffers/status/actions.lua:63  [Status - Open] 'silent! edit /Users/.../nvim/lua/config/ui.lua | 24 | norm! zz'
[D 2.31.06 ] buffers/status/actions.lua:63  [Status - Open] 'silent! edit /Users/.../gitconfig | 78 | norm! zz'
CKolkey commented 4 months ago

If you were to run :lua vim.cmd('silent! edit /Users/.../gitconfig | 1 | norm! zz', what happens?

(presuming you sub your username back in, of course)

kuntau commented 4 months ago

Ok I can see in the split second neogit opening the file in neogit window and closing that window. That's why.

Opening it manually from cmd work fine.

Edit: And I saw the buffer in the background buffer list, thus confirming neogit opening it in the wrong window

CKolkey commented 4 months ago

Alright, thats helpful.

CKolkey commented 4 months ago

I still can't reproduce this locally, but I schedule-wrapped the open command on master. Let me know if this has any impact.

kuntau commented 4 months ago

I still can't reproduce this locally, but I schedule-wrapped the open command on master. Let me know if this has any impact.

Perfect, everything works as expected 👍🏽

Thank you

CKolkey commented 4 months ago

Glad to hear it! Thanks for reporting this.

raaymax commented 4 months ago

Nice! Two days ago, I reported an issue. I checked back to see if anyone even responded to my report, and surprise, surprise, the bug is already fixed! Great job!🥇