diff options
Diffstat (limited to 'src/luarocks/fs.lua')
-rw-r--r-- | src/luarocks/fs.lua | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/luarocks/fs.lua b/src/luarocks/fs.lua new file mode 100644 index 0000000..467b194 --- /dev/null +++ b/src/luarocks/fs.lua @@ -0,0 +1,40 @@ + +--- Proxy module for filesystem and platform abstractions. +-- All code using "fs" code should require "luarocks.fs", +-- and not the various platform-specific implementations. +-- However, see the documentation of the implementation +-- for the API reference. + +local pairs = pairs + +module("luarocks.fs", package.seeall) + +local cfg = require("luarocks.cfg") + +local function load_fns(fs_table) + for name, fn in pairs(fs_table) do + if not _M[name] then + _M[name] = fn + end + end +end + +-- Load platform-specific functions +local loaded_platform = nil +for _, platform in ipairs(cfg.platforms) do + local ok, fs_plat = pcall(require, "luarocks.fs."..platform) + if ok and fs_plat then + loaded_platform = platform + load_fns(fs_plat) + break + end +end + +-- Load platform-independent pure-Lua functionality +local fs_lua = require("luarocks.fs.lua") +load_fns(fs_lua) + +-- Load platform-specific fallbacks for missing Lua modules +local ok, fs_plat_tools = pcall(require, "luarocks.fs."..loaded_platform..".tools") +if ok and fs_plat_tools then load_fns(fs_plat_tools) end + |