fix(#2382): git watcher handles worktrees and submodules, via --absolute-git-dir when it is available (#2389)

* fix(#2382): use --absolute-git-dir when available

* fix(#2382): use --absolute-git-dir when available

* fix(#2382): rename private git members, destroy git watchers on purge

* fix(#2382): consistent naming of toplevel

* fix(#2382): more doc and safety

* fix(#2382): consistent naming of toplevel

* fix(#2382): consistent naming of toplevel
This commit is contained in:
Alexander Courtis
2023-09-02 12:05:34 +10:00
committed by GitHub
parent 00741206c2
commit 28c3980b25
5 changed files with 139 additions and 83 deletions

View File

@@ -22,10 +22,10 @@ local function update_status(nodes_by_path, node_ignored, status)
end
local function reload_and_get_git_project(path, callback)
local project_root = git.get_project_root(path)
local toplevel = git.get_toplevel(path)
git.reload_project(project_root, path, function()
callback(project_root, git.get_project(project_root) or {})
git.reload_project(toplevel, path, function()
callback(toplevel, git.get_project(toplevel) or {})
end)
end
@@ -38,7 +38,7 @@ local function update_parent_statuses(node, project, root)
break
end
root = git.get_project_root(node.parent.absolute_path)
root = git.get_toplevel(node.parent.absolute_path)
-- stop when no more projects
if not root then
@@ -174,10 +174,10 @@ function M.refresh_node(node, callback)
local parent_node = utils.get_parent_of_group(node)
reload_and_get_git_project(node.absolute_path, function(project_root, project)
reload_and_get_git_project(node.absolute_path, function(toplevel, project)
require("nvim-tree.explorer.reload").reload(parent_node, project)
update_parent_statuses(parent_node, project, project_root)
update_parent_statuses(parent_node, project, toplevel)
callback()
end)
@@ -211,11 +211,11 @@ function M.refresh_parent_nodes_for_path(path)
-- refresh in order; this will expand groups as needed
for _, node in ipairs(parent_nodes) do
local project_root = git.get_project_root(node.absolute_path)
local project = git.get_project(project_root) or {}
local toplevel = git.get_toplevel(node.absolute_path)
local project = git.get_project(toplevel) or {}
M.reload(node, project)
update_parent_statuses(node, project, project_root)
update_parent_statuses(node, project, toplevel)
end
log.profile_end(profile)