Software /
code /
prosody
Changeset
3613:f617718d2221
configmanager: Change parser API again to pass a config table to insert settings to. Fixes Include(). (Thanks Zash/answerman)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 11 Nov 2010 12:23:51 +0000 |
parents | 3612:5547acd18a9f |
children | 3614:8b436cc88c0e |
files | core/configmanager.lua |
diffstat | 1 files changed, 7 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/core/configmanager.lua Thu Nov 11 08:36:31 2010 +0500 +++ b/core/configmanager.lua Thu Nov 11 12:23:51 2010 +0000 @@ -91,10 +91,10 @@ if parsers[format] and parsers[format].load then local f, err = io.open(filename); if f then - local new_config, err = parsers[format].load(f:read("*a"), filename); + local new_config = setmetatable({ ["*"] = { core = {} } }, config_mt); + local ok, err = parsers[format].load(f:read("*a"), filename, new_config); f:close(); - if new_config then - setmetatable(new_config, config_mt); + if ok then config = new_config; fire_event("config-reloaded", { filename = filename, @@ -137,9 +137,7 @@ local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable; local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring; parsers.lua = {}; - function parsers.lua.load(data, filename) - local config = { ["*"] = { core = {} } }; - + function parsers.lua.load(data, filename, config) local env; -- The ' = true' are needed so as not to set off __newindex when we assign the functions below env = setmetatable({ @@ -206,8 +204,8 @@ if f then local data = f:read("*a"); local file = resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file); - local ok, err = parsers.lua.load(data, file); - if not ok then error(err:gsub("%[string.-%]", file), 0); end + local ret, err = parsers.lua.load(data, 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; @@ -232,7 +230,7 @@ return nil, err; end - return config; + return true; end end