X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Fconfigmanager.lua;h=16d4b8e2f4a0ecb2841600bc01973c6c83d00b60;hb=b6d336cbfe79bf837dbf89f80d4852aa58a110c4;hp=a85f950cd7ac0e7020fabee7f063f22e9f05690d;hpb=0c2073da4938f4a63daa24042f68d8892e3ff029;p=prosody.git diff --git a/core/configmanager.lua b/core/configmanager.lua index a85f950c..16d4b8e2 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -19,10 +19,11 @@ local resolve_relative_path = require"util.paths".resolve_relative_path; local glob_to_pattern = require"util.paths".glob_to_pattern; local path_sep = package.config:sub(1,1); -local have_encodings, encodings = pcall(require, "util.encodings"); -local nameprep = have_encodings and encodings.stringprep.nameprep or function (host) return host:lower(); end +local encodings = deps.softreq"util.encodings"; +local nameprep = encodings and encodings.stringprep.nameprep or function (host) return host:lower(); end -module "configmanager" +local _M = {}; +local _ENV = nil; _M.resolve_relative_path = resolve_relative_path; -- COMPAT @@ -34,11 +35,11 @@ local config = setmetatable({ ["*"] = { } }, config_mt); -- When host not found, use global local host_mt = { __index = function(_, k) return config["*"][k] end } -function getconfig() +function _M.getconfig() return config; end -function get(host, key, _oldkey) +function _M.get(host, key, _oldkey) if key == "core" then key = _oldkey; -- COMPAT with code that still uses "core" end @@ -73,7 +74,7 @@ function _M.set(host, key, value, _oldvalue) return set(config, host, key, value); end -function load(filename, config_format) +function _M.load(filename, config_format) config_format = config_format or filename:match("%w+$"); if parsers[config_format] and parsers[config_format].load then @@ -102,7 +103,7 @@ function load(filename, config_format) end end -function addparser(config_format, parser) +function _M.addparser(config_format, parser) if config_format and parser then parsers[config_format] = parser; end @@ -183,6 +184,7 @@ do env.component = env.Component; function env.Include(file) + -- Check whether this is a wildcard Include if file:match("[*?]") then local lfs = deps.softreq "lfs"; if not lfs then @@ -202,16 +204,17 @@ do env.Include(path..path_sep..f); end end - else - local file = resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file); - local f, err = io.open(file); - if f then - local ret, err = parsers.lua.load(f:read("*a"), file, config); - if not ret then error(err:gsub("%[string.-%]", file), 0); end - end - if not f then error("Error loading included "..file..": "..err, 0); end - return f, err; + return; + end + -- Not a wildcard, so resolve (potentially) relative path and run through config parser + file = resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file); + local f, err = io.open(file); + if f then + local ret, err = parsers.lua.load(f:read("*a"), file, config_table); + if not ret then error(err:gsub("%[string.-%]", file), 0); end end + if not f then error("Error loading included "..file..": "..err, 0); end + return f, err; end env.include = env.Include;