From 8986eee42053f9da8cccd2296d2094e3c9d9473e Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 14 Aug 2023 13:07:16 +1000 Subject: [PATCH 1/4] fix(#2301): reloader handles grouped --- lua/nvim-tree/actions/reloaders/reloaders.lua | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lua/nvim-tree/actions/reloaders/reloaders.lua b/lua/nvim-tree/actions/reloaders/reloaders.lua index b69cf4a0755..662f76c7abe 100644 --- a/lua/nvim-tree/actions/reloaders/reloaders.lua +++ b/lua/nvim-tree/actions/reloaders/reloaders.lua @@ -4,18 +4,22 @@ local renderer = require "nvim-tree.renderer" local explorer_module = require "nvim-tree.explorer" local core = require "nvim-tree.core" local explorer_node = require "nvim-tree.explorer.node" +local Iterator = require "nvim-tree.iterators.node-iterator" local M = {} local function refresh_nodes(node, projects, unloaded_bufnr) - local cwd = node.cwd or node.link_to or node.absolute_path - local project_root = git.get_project_root(cwd) - explorer_module.reload(node, projects[project_root] or {}, unloaded_bufnr) - for _, _node in ipairs(node.nodes) do - if _node.nodes and _node.open then - refresh_nodes(_node, projects, unloaded_bufnr) - end - end + Iterator.builder({ node }) + :applier(function(n) + if n.open and n.nodes then + local project_root = git.get_project_root(n.cwd or n.link_to or n.absolute_path) + explorer_module.reload(n, projects[project_root] or {}, unloaded_bufnr) + end + end) + :recursor(function(n) + return n.group_next and { n.group_next } or (n.open and n.nodes) + end) + :iterate() end function M.reload_node_status(parent_node, projects) From 779125d7d408bed5bb3b471d719cdd5b54a03aa0 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 14 Aug 2023 13:14:47 +1000 Subject: [PATCH 2/4] fix(#2301): explore uses correct git project for grouped --- lua/nvim-tree/explorer/explore.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/explorer/explore.lua b/lua/nvim-tree/explorer/explore.lua index 8cab79ae75f..bc338ffb636 100644 --- a/lua/nvim-tree/explorer/explore.lua +++ b/lua/nvim-tree/explorer/explore.lua @@ -70,8 +70,10 @@ function M.explore(node, status) local is_root = not node.parent local child_folder_only = explorer_node.has_one_child_folder(node) and node.nodes[1] if M.config.group_empty and not is_root and child_folder_only then + local child_cwd = child_folder_only.link_to or child_folder_only.absolute_path + local child_status = git.load_project_status(child_cwd) node.group_next = child_folder_only - local ns = M.explore(child_folder_only, status) + local ns = M.explore(child_folder_only, child_status) node.nodes = ns or {} log.profile_end(profile) From 1010b115dd0d44457fd63c08034a7b639e3d28fa Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 14 Aug 2023 16:28:39 +1000 Subject: [PATCH 3/4] fix(#2301): update parent status correctly across repositories --- lua/nvim-tree/explorer/reload.lua | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/explorer/reload.lua b/lua/nvim-tree/explorer/reload.lua index 50f12e0c832..aee26dc266c 100644 --- a/lua/nvim-tree/explorer/reload.lua +++ b/lua/nvim-tree/explorer/reload.lua @@ -30,8 +30,30 @@ local function reload_and_get_git_project(path, callback) end local function update_parent_statuses(node, project, root) - while project and node and node.absolute_path ~= root do + while project and node do + -- step up to the containing project + if node.absolute_path == root then + -- stop at the top of the tree + if not node.parent then + break + end + + root = git.get_project_root(node.parent.absolute_path) + + -- stop when no more projects + if not root then + break + end + + -- update the containing project + project = git.get_project(root) + git.reload_project(root, node.absolute_path, nil) + end + + -- update status explorer_node.update_git_status(node, explorer_node.is_git_ignored(node.parent), project) + + -- maybe parent node = node.parent end end From ad18274da35818d2ba2f57d80c9cb534d81eb880 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 14 Aug 2023 16:41:04 +1000 Subject: [PATCH 4/4] fix(#2301): missing require --- lua/nvim-tree/explorer/explore.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/nvim-tree/explorer/explore.lua b/lua/nvim-tree/explorer/explore.lua index bc338ffb636..792a9aa6a24 100644 --- a/lua/nvim-tree/explorer/explore.lua +++ b/lua/nvim-tree/explorer/explore.lua @@ -1,6 +1,7 @@ local utils = require "nvim-tree.utils" local builders = require "nvim-tree.explorer.node-builders" local explorer_node = require "nvim-tree.explorer.node" +local git = require "nvim-tree.git" local sorters = require "nvim-tree.explorer.sorters" local filters = require "nvim-tree.explorer.filters" local live_filter = require "nvim-tree.live-filter"