mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 18:50:03 +08:00
50 lines
1.5 KiB
Lua
Vendored
50 lines
1.5 KiB
Lua
Vendored
local vim = vim
|
|
local renderer = require("neo-tree.ui.renderer")
|
|
local file_items = require("neo-tree.sources.common.file-items")
|
|
local log = require("neo-tree.log")
|
|
local git = require("neo-tree.git")
|
|
|
|
local M = {}
|
|
|
|
---Get a table of all open buffers, along with all parent paths of those buffers.
|
|
---The paths are the keys of the table, and all the values are 'true'.
|
|
M.get_git_status = function(state)
|
|
if state.loading then
|
|
return
|
|
end
|
|
state.loading = true
|
|
local status_lookup, project_root = git.status(state.git_base, true)
|
|
state.path = project_root or state.path or vim.fn.getcwd()
|
|
local context = file_items.create_context()
|
|
context.state = state
|
|
-- Create root folder
|
|
local root = file_items.create_item(context, state.path, "directory")
|
|
root.name = vim.fn.fnamemodify(root.path, ":~")
|
|
root.loaded = true
|
|
root.search_pattern = state.search_pattern
|
|
context.folders[root.path] = root
|
|
|
|
for path, status in pairs(status_lookup) do
|
|
local success, item = pcall(file_items.create_item, context, path, "file")
|
|
item.status = status
|
|
if success then
|
|
item.extra = {
|
|
git_status = status,
|
|
}
|
|
else
|
|
log.error("Error creating item for " .. path .. ": " .. item)
|
|
end
|
|
end
|
|
|
|
state.git_status_lookup = status_lookup
|
|
state.default_expanded_nodes = {}
|
|
for id, _ in pairs(context.folders) do
|
|
table.insert(state.default_expanded_nodes, id)
|
|
end
|
|
file_items.deep_sort(root.children, state.sort_function_override)
|
|
renderer.show_nodes({ root }, state)
|
|
state.loading = false
|
|
end
|
|
|
|
return M
|