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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 3 deletions

View File

@ -458,6 +458,7 @@ applying configuration.
ignore = true,
show_on_dirs = true,
show_on_open_dirs = true,
disable_for_dirs = {},
timeout = 400,
},
modified = {
@ -525,8 +526,7 @@ applying configuration.
trash = true,
},
},
experimental = {
},
experimental = {},
log = {
enable = false,
truncate = false,
@ -734,6 +734,11 @@ Git integration with icons and colors.
Only relevant when `git.show_on_dirs` is `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*
Kills the git process after some time if it takes too long.
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,
show_on_dirs = true,
show_on_open_dirs = true,
disable_for_dirs = {},
timeout = 400,
},
modified = {

View File

@ -107,7 +107,16 @@ function M.get_project_root(cwd)
return nil
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]
end

View File

@ -3,6 +3,9 @@ local log = require "nvim-tree.log"
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)
local profile = log.profile_start("git toplevel %s", cwd)