mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 06:30:03 +08:00
95 lines
2.4 KiB
Lua
95 lines
2.4 KiB
Lua
local Path = require("plenary.path")
|
|
|
|
local fs = {}
|
|
|
|
function fs.create_temp_dir()
|
|
-- Resolve for two reasons.
|
|
-- 1. Follow any symlinks which make comparing paths fail. (on macOS, TMPDIR can be under /var which is symlinked to
|
|
-- /private/var)
|
|
-- 2. Remove any double separators (on macOS TMPDIR can end in a trailing / which absolute doesn't remove, this should
|
|
-- be coverted by https://github.com/nvim-lua/plenary.nvim/issues/330).
|
|
local temp_dir = vim.fn.resolve(
|
|
Path:new(
|
|
vim.fn.fnamemodify(vim.fn.tempname(), ":h"),
|
|
string.format("neo-tree-test-%s", vim.fn.rand())
|
|
):absolute()
|
|
)
|
|
vim.fn.mkdir(temp_dir, "p")
|
|
return temp_dir
|
|
end
|
|
|
|
function fs.create_dir(path)
|
|
local abspath = Path:new(path):absolute()
|
|
vim.fn.mkdir(abspath, "p")
|
|
end
|
|
|
|
function fs.remove_dir(dir, recursive)
|
|
if vim.fn.isdirectory(dir) == 1 then
|
|
return vim.fn.delete(dir, recursive and "rf" or "d") == 0
|
|
end
|
|
return false
|
|
end
|
|
|
|
function fs.write_file(path, content)
|
|
local abspath = Path:new(path):absolute()
|
|
fs.create_dir(vim.fn.fnamemodify(abspath, ":h"))
|
|
vim.fn.writefile(content or {}, abspath)
|
|
end
|
|
|
|
function fs.create_fs_tree(fs_tree)
|
|
local function create_items(items, basedir, relative_root_path)
|
|
relative_root_path = relative_root_path or "."
|
|
|
|
for _, item in ipairs(items) do
|
|
local relative_path = relative_root_path .. "/" .. item.name
|
|
|
|
-- create lookups
|
|
fs_tree.lookup[relative_path] = item
|
|
if item.id then
|
|
fs_tree.lookup[item.id] = item
|
|
end
|
|
|
|
-- create actual files and directories
|
|
if item.type == "dir" then
|
|
item.abspath = Path:new(basedir, item.name):absolute()
|
|
fs.create_dir(item.abspath)
|
|
if item.items then
|
|
create_items(item.items, item.abspath, relative_path)
|
|
end
|
|
elseif item.type == "file" then
|
|
item.abspath = Path:new(basedir, item.name):absolute()
|
|
fs.write_file(item.abspath)
|
|
end
|
|
end
|
|
end
|
|
|
|
create_items(fs_tree.items, fs_tree.abspath)
|
|
|
|
return fs_tree
|
|
end
|
|
|
|
function fs.init_test(fs_tree)
|
|
fs_tree.lookup = {}
|
|
if not fs_tree.abspath then
|
|
fs_tree.abspath = fs.create_temp_dir()
|
|
end
|
|
|
|
local function setup()
|
|
fs.remove_dir(fs_tree.abspath, true)
|
|
fs.create_fs_tree(fs_tree)
|
|
vim.cmd("tcd " .. fs_tree.abspath)
|
|
end
|
|
|
|
local function teardown()
|
|
fs.remove_dir(fs_tree.abspath, true)
|
|
end
|
|
|
|
return {
|
|
fs_tree = fs_tree,
|
|
setup = setup,
|
|
teardown = teardown,
|
|
}
|
|
end
|
|
|
|
return fs
|