diff options
Diffstat (limited to 'lua/lvim/utils.lua')
| -rw-r--r-- | lua/lvim/utils.lua | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/lua/lvim/utils.lua b/lua/lvim/utils.lua index 71ede6e6..5e49906a 100644 --- a/lua/lvim/utils.lua +++ b/lua/lvim/utils.lua @@ -104,4 +104,29 @@ function M.write_file(path, txt, flag)    end)  end +---Copies a file or directory recursively +---@param source string +---@param destination string +function M.fs_copy(source, destination) +  local source_stats = assert(vim.loop.fs_stat(source)) + +  if source_stats.type == "file" then +    assert(vim.loop.fs_copyfile(source, destination)) +    return +  elseif source_stats.type == "directory" then +    local handle = assert(vim.loop.fs_scandir(source)) + +    assert(vim.loop.fs_mkdir(destination, source_stats.mode)) + +    while true do +      local name = vim.loop.fs_scandir_next(handle) +      if not name then +        break +      end + +      M.fs_copy(M.join_paths(source, name), M.join_paths(destination, name)) +    end +  end +end +  return M | 
