feat(#1837): add git.disable_for_dirs (#2239)

* feat(##1837): add git.disabled_dirs

* feat(#1837): add git.disable_for_dirs

* feat(#1837): note disable_for_dirs evaluation
This commit is contained in:
Alexander Courtis
2023-06-04 14:29:04 +10:00
committed by GitHub
parent 73ab6651db
commit 63061404f4
4 changed files with 21 additions and 3 deletions

View File

@@ -458,6 +458,7 @@ applying configuration.
ignore = true, ignore = true,
show_on_dirs = true, show_on_dirs = true,
show_on_open_dirs = true, show_on_open_dirs = true,
disable_for_dirs = {},
timeout = 400, timeout = 400,
}, },
modified = { modified = {
@@ -525,8 +526,7 @@ applying configuration.
trash = true, trash = true,
}, },
}, },
experimental = { experimental = {},
},
log = { log = {
enable = false, enable = false,
truncate = false, truncate = false,
@@ -734,6 +734,11 @@ Git integration with icons and colors.
Only relevant when `git.show_on_dirs` is `true`. Only relevant when `git.show_on_dirs` is `true`.
Type: `boolean`, Default: `true` Type: `boolean`, Default: `true`
*nvim-tree.git.disable_for_dirs*
Disable git integration when git top-level matches these paths.
May be relative, evaluated via |fnamemodify| `":p"`
Type: `table`, Default: `{}`
*nvim-tree.git.timeout* *nvim-tree.git.timeout*
Kills the git process after some time if it takes too long. Kills the git process after some time if it takes too long.
Git integration will be disabled after 10 git jobs exceed this timeout. Git integration will be disabled after 10 git jobs exceed this timeout.

View File

@@ -492,6 +492,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
ignore = true, ignore = true,
show_on_dirs = true, show_on_dirs = true,
show_on_open_dirs = true, show_on_open_dirs = true,
disable_for_dirs = {},
timeout = 400, timeout = 400,
}, },
modified = { modified = {

View File

@@ -107,7 +107,16 @@ function M.get_project_root(cwd)
return nil return nil
end end
M.cwd_to_project_root[cwd] = git_utils.get_toplevel(cwd) local toplevel = git_utils.get_toplevel(cwd)
for _, disabled_for_dir in ipairs(M.config.git.disable_for_dirs) do
local toplevel_norm = vim.fn.fnamemodify(toplevel, ":p")
local disabled_norm = vim.fn.fnamemodify(disabled_for_dir, ":p")
if toplevel_norm == disabled_norm then
return nil
end
end
M.cwd_to_project_root[cwd] = toplevel
return M.cwd_to_project_root[cwd] return M.cwd_to_project_root[cwd]
end end

View File

@@ -3,6 +3,9 @@ local log = require "nvim-tree.log"
local has_cygpath = vim.fn.executable "cygpath" == 1 local has_cygpath = vim.fn.executable "cygpath" == 1
--- Retrieve the git toplevel directory
--- @param cwd string path
--- @return string|nil toplevel absolute path
function M.get_toplevel(cwd) function M.get_toplevel(cwd)
local profile = log.profile_start("git toplevel %s", cwd) local profile = log.profile_start("git toplevel %s", cwd)