From 80a41f373452d3a57f1a8b8ab2b7a4d0595007fb Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Mon, 13 Feb 2023 18:48:59 +1100 Subject: [PATCH 1/4] #1961 diagnostic logging refresh_nodes_for_path --- lua/nvim-tree/explorer/reload.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lua/nvim-tree/explorer/reload.lua b/lua/nvim-tree/explorer/reload.lua index 77386415853..00b9f239dfe 100644 --- a/lua/nvim-tree/explorer/reload.lua +++ b/lua/nvim-tree/explorer/reload.lua @@ -179,6 +179,14 @@ function M.refresh_nodes_for_path(path) :applier(function(node) local abs_contains = node.absolute_path and path:match("^" .. node.absolute_path) local link_contains = node.link_to and path:match("^" .. node.link_to) + log.line( + "all", + "refresh_nodes_for_path absolute_path='%s' link_to='%s' %s %s", + node.absolute_path, + node.link_to, + abs_contains and "abs_contains" or "", + link_contains and "link_contains" or "" + ) if abs_contains or link_contains then M.refresh_node(node) end From 3e351c250e9b760938fc3b07219f35e93dd1a201 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Tue, 14 Feb 2023 11:31:24 +1100 Subject: [PATCH 2/4] #1961 add cycle detection to refresh_nodes_for_path --- lua/nvim-tree/explorer/reload.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/explorer/reload.lua b/lua/nvim-tree/explorer/reload.lua index 00b9f239dfe..432b02136b3 100644 --- a/lua/nvim-tree/explorer/reload.lua +++ b/lua/nvim-tree/explorer/reload.lua @@ -166,6 +166,9 @@ function M.refresh_nodes_for_path(path) local profile = log.profile_start("refresh_nodes_for_path %s", path) + -- avoids cycles + local paths_refreshed = {} + NodeIterator.builder({ explorer }) :hidden() :recursor(function(node) @@ -188,7 +191,10 @@ function M.refresh_nodes_for_path(path) link_contains and "link_contains" or "" ) if abs_contains or link_contains then - M.refresh_node(node) + if not paths_refreshed[node.absolute_path] then + paths_refreshed[node.absolute_path] = true + M.refresh_node(node) + end end end) :iterate() From 8d1d4dc302b4fda68056b85c631e52440335267b Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Tue, 14 Feb 2023 15:06:20 +1100 Subject: [PATCH 3/4] #1961 escape special characters on when path matching during refresh --- lua/nvim-tree/explorer/reload.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/explorer/reload.lua b/lua/nvim-tree/explorer/reload.lua index 432b02136b3..9dfbd69d6d6 100644 --- a/lua/nvim-tree/explorer/reload.lua +++ b/lua/nvim-tree/explorer/reload.lua @@ -180,8 +180,8 @@ function M.refresh_nodes_for_path(path) end end) :applier(function(node) - local abs_contains = node.absolute_path and path:match("^" .. node.absolute_path) - local link_contains = node.link_to and path:match("^" .. node.link_to) + local abs_contains = node.absolute_path and path:find(node.absolute_path, 1, true) ~= 1 + local link_contains = node.link_to and path:find(node.link_to, 1, true) ~= 1 log.line( "all", "refresh_nodes_for_path absolute_path='%s' link_to='%s' %s %s", From 216bc2b025c1c1bab0ecd542d540969d067f3e0e Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Tue, 14 Feb 2023 15:07:09 +1100 Subject: [PATCH 4/4] #1961 escape special characters on when path matching during refresh --- lua/nvim-tree/explorer/reload.lua | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lua/nvim-tree/explorer/reload.lua b/lua/nvim-tree/explorer/reload.lua index 9dfbd69d6d6..89fdf5ff1f9 100644 --- a/lua/nvim-tree/explorer/reload.lua +++ b/lua/nvim-tree/explorer/reload.lua @@ -182,14 +182,6 @@ function M.refresh_nodes_for_path(path) :applier(function(node) local abs_contains = node.absolute_path and path:find(node.absolute_path, 1, true) ~= 1 local link_contains = node.link_to and path:find(node.link_to, 1, true) ~= 1 - log.line( - "all", - "refresh_nodes_for_path absolute_path='%s' link_to='%s' %s %s", - node.absolute_path, - node.link_to, - abs_contains and "abs_contains" or "", - link_contains and "link_contains" or "" - ) if abs_contains or link_contains then if not paths_refreshed[node.absolute_path] then paths_refreshed[node.absolute_path] = true