Comparison

core/configmanager.lua @ 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
parent 3610:2084959d4096
child 3780:791aede977da
comparison
equal deleted inserted replaced
3612:5547acd18a9f 3613:f617718d2221
89 format = format or filename:match("%w+$"); 89 format = format or filename:match("%w+$");
90 90
91 if parsers[format] and parsers[format].load then 91 if parsers[format] and parsers[format].load then
92 local f, err = io.open(filename); 92 local f, err = io.open(filename);
93 if f then 93 if f then
94 local new_config, err = parsers[format].load(f:read("*a"), filename); 94 local new_config = setmetatable({ ["*"] = { core = {} } }, config_mt);
95 local ok, err = parsers[format].load(f:read("*a"), filename, new_config);
95 f:close(); 96 f:close();
96 if new_config then 97 if ok then
97 setmetatable(new_config, config_mt);
98 config = new_config; 98 config = new_config;
99 fire_event("config-reloaded", { 99 fire_event("config-reloaded", {
100 filename = filename, 100 filename = filename,
101 format = format, 101 format = format,
102 config = config 102 config = config
135 -- Built-in Lua parser 135 -- Built-in Lua parser
136 do 136 do
137 local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable; 137 local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable;
138 local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring; 138 local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring;
139 parsers.lua = {}; 139 parsers.lua = {};
140 function parsers.lua.load(data, filename) 140 function parsers.lua.load(data, filename, config)
141 local config = { ["*"] = { core = {} } };
142
143 local env; 141 local env;
144 -- The ' = true' are needed so as not to set off __newindex when we assign the functions below 142 -- The ' = true' are needed so as not to set off __newindex when we assign the functions below
145 env = setmetatable({ 143 env = setmetatable({
146 Host = true, host = true, VirtualHost = true, 144 Host = true, host = true, VirtualHost = true,
147 Component = true, component = true, 145 Component = true, component = true,
204 function env.Include(file) 202 function env.Include(file)
205 local f, err = io.open(file); 203 local f, err = io.open(file);
206 if f then 204 if f then
207 local data = f:read("*a"); 205 local data = f:read("*a");
208 local file = resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file); 206 local file = resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file);
209 local ok, err = parsers.lua.load(data, file); 207 local ret, err = parsers.lua.load(data, file, config);
210 if not ok then error(err:gsub("%[string.-%]", file), 0); end 208 if not ret then error(err:gsub("%[string.-%]", file), 0); end
211 end 209 end
212 if not f then error("Error loading included "..file..": "..err, 0); end 210 if not f then error("Error loading included "..file..": "..err, 0); end
213 return f, err; 211 return f, err;
214 end 212 end
215 env.include = env.Include; 213 env.include = env.Include;
230 228
231 if not ok then 229 if not ok then
232 return nil, err; 230 return nil, err;
233 end 231 end
234 232
235 return config; 233 return true;
236 end 234 end
237 235
238 end 236 end
239 237
240 return _M; 238 return _M;