Skip to content

feat(git): support DA state #1905

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion lua/nvim-tree/explorer/explore.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ local filters = require "nvim-tree.explorer.filters"
local live_filter = require "nvim-tree.live-filter"
local log = require "nvim-tree.log"

local Watcher = require "nvim-tree.watcher"

local M = {}

local function get_type_from(type_, cwd)
Expand All @@ -28,7 +30,11 @@ local function populate_children(handle, cwd, node, git_status)
local ps = log.profile_start(pn)

t = get_type_from(t, abs)
if not filters.should_filter(abs, filter_status) and not nodes_by_path[abs] then
if
not filters.should_filter(abs, filter_status)
and not nodes_by_path[abs]
and Watcher.is_fs_event_capable(abs)
then
local child = nil
if t == "directory" and vim.loop.fs_access(abs, "R") then
child = builders.folder(node, abs, name)
Expand Down
3 changes: 2 additions & 1 deletion lua/nvim-tree/explorer/reload.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ local git = require "nvim-tree.git"
local log = require "nvim-tree.log"

local NodeIterator = require "nvim-tree.iterators.node-iterator"
local Watcher = require "nvim-tree.watcher"

local M = {}

Expand Down Expand Up @@ -86,7 +87,7 @@ function M.reload(node, git_status, unloaded_bufnr)
end

if not nodes_by_path[abs] then
if t == "directory" and vim.loop.fs_access(abs, "R") then
if t == "directory" and vim.loop.fs_access(abs, "R") and Watcher.is_fs_event_capable(abs) then
local folder = builders.folder(node, abs, name)
nodes_by_path[abs] = folder
table.insert(node.nodes, folder)
Expand Down
1 change: 1 addition & 0 deletions lua/nvim-tree/renderer/components/git.lua
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ local function build_icons_table(i)
["UA"] = { icons.unmerged },
[" D"] = { icons.deleted },
["D "] = { icons.deleted },
["DA"] = { icons.unstaged },
["RD"] = { icons.deleted },
["DD"] = { icons.deleted },
["DU"] = { icons.deleted, icons.unmerged },
Expand Down
25 changes: 25 additions & 0 deletions lua/nvim-tree/watcher.lua
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,29 @@ function M.purge_watchers()
end
end

--- Windows NT will present directories that cannot be enumerated.
--- Detect these by attempting to start an event monitor.
--- @param path string
--- @return boolean
function M.is_fs_event_capable(path)
if not utils.is_windows then
return true
end

local fs_event = vim.loop.new_fs_event()
if not fs_event then
return false
end

if fs_event:start(path, FS_EVENT_FLAGS, function() end) ~= 0 then
return false
end

if fs_event:stop() ~= 0 then
return false
end

return true
end

return M