Software /
code /
prosody
Annotate
core/configmanager.lua @ 12553:cc0ec0277813 0.12
util.startup: Fix async waiting for last shutdown steps
Observed problem: When shutting down prosody would immediately exit
after waiting for s2s connections to close, skipping the last cleanup
events and reporting the exit reason and code.
This happens because prosody.main_thread is in a waiting state and
queuing startup.shutdown is dispatched trough the main loop via
nexttick, but since the main loop was no longer running at that point it
proceeded to the end of the prosody script and exited there.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 14 Jun 2022 16:28:49 +0200 |
parent | 12448:fb7e76c1ad1c |
child | 12531:32bcb899526f |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1504
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2862
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2862
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
466
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
466
diff
changeset
|
8 |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local _G = _G; |
9876
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
10 local setmetatable, rawget, rawset, io, os, error, dofile, type, pairs, ipairs = |
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
11 setmetatable, rawget, rawset, io, os, error, dofile, type, pairs, ipairs; |
9874
c9f5ccdcdf80
configmanager: Add support for returning warnings
Matthew Wild <mwild1@gmail.com>
parents:
9241
diff
changeset
|
12 local format, math_max, t_insert = string.format, math.max, table.insert; |
2861
1402615b66f8
configmanager: Error when a component and host clash hostnames
Matthew Wild <mwild1@gmail.com>
parents:
1777
diff
changeset
|
13 |
5021
85b2689dbcfe
Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents:
4530
diff
changeset
|
14 local envload = require"util.envload".envload; |
6166
46cb87d531a7
configmanager: Delay importing LuaFileSystem until needed by an Include line
Kim Alvefur <zash@zash.se>
parents:
5811
diff
changeset
|
15 local deps = require"util.dependencies"; |
6164
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
5814
diff
changeset
|
16 local resolve_relative_path = require"util.paths".resolve_relative_path; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
5814
diff
changeset
|
17 local glob_to_pattern = require"util.paths".glob_to_pattern; |
3609
954b1159f2f3
prosody, configmanager, certmanager: Relocate prosody.resolve_relative_path() to configmanager, and update certmanager (the only user of this function)
Matthew Wild <mwild1@gmail.com>
parents:
3573
diff
changeset
|
18 local path_sep = package.config:sub(1,1); |
9875
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
19 local get_traceback_table = require "util.debug".get_traceback_table; |
3609
954b1159f2f3
prosody, configmanager, certmanager: Relocate prosody.resolve_relative_path() to configmanager, and update certmanager (the only user of this function)
Matthew Wild <mwild1@gmail.com>
parents:
3573
diff
changeset
|
20 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
21 local encodings = deps.softreq"util.encodings"; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
22 local nameprep = encodings and encodings.stringprep.nameprep or function (host) return host:lower(); end |
6323
5926f01e5cd2
configmanager: nameprep VirtualHost and Component names
Matthew Wild <mwild1@gmail.com>
parents:
6166
diff
changeset
|
23 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
24 local _M = {}; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
25 local _ENV = nil; |
8555
4f0f5b49bb03
vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8158
diff
changeset
|
26 -- luacheck: std none |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
6164
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
5814
diff
changeset
|
28 _M.resolve_relative_path = resolve_relative_path; -- COMPAT |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
5814
diff
changeset
|
29 |
8153
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
30 local parser = nil; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 |
6715
03a283aa679e
configmanager: Rename unused function argument [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6714
diff
changeset
|
32 local config_mt = { __index = function (t, _) return rawget(t, "*"); end}; |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
33 local config = setmetatable({ ["*"] = { } }, config_mt); |
12440
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
34 local files = {}; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 -- When host not found, use global |
5380
e119e378b1d9
configmanager: Fix so unset variables are searched for in the global section
Kim Alvefur <zash@zash.se>
parents:
5357
diff
changeset
|
37 local host_mt = { __index = function(_, k) return config["*"][k] end } |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
39 function _M.getconfig() |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
40 return config; |
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
41 end |
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
42 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
43 function _M.get(host, key, _oldkey) |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
44 if key == "core" then |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
45 key = _oldkey; -- COMPAT with code that still uses "core" |
4530
40905e7bf680
configmanager: get(): Make section (core) optional (hurrah)
Matthew Wild <mwild1@gmail.com>
parents:
4358
diff
changeset
|
46 end |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
47 return config[host][key]; |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
48 end |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
49 function _M.rawget(host, key, _oldkey) |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
50 if key == "core" then |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
51 key = _oldkey; -- COMPAT with code that still uses "core" |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 end |
4001
2e8411f6cb14
configmanager: Added rawget().
Waqas Hussain <waqas20@gmail.com>
parents:
3929
diff
changeset
|
53 local hostconfig = rawget(config, host); |
2e8411f6cb14
configmanager: Added rawget().
Waqas Hussain <waqas20@gmail.com>
parents:
3929
diff
changeset
|
54 if hostconfig then |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
55 return rawget(hostconfig, key); |
4001
2e8411f6cb14
configmanager: Added rawget().
Waqas Hussain <waqas20@gmail.com>
parents:
3929
diff
changeset
|
56 end |
2e8411f6cb14
configmanager: Added rawget().
Waqas Hussain <waqas20@gmail.com>
parents:
3929
diff
changeset
|
57 end |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 |
6712
29d5875ae38d
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6326
diff
changeset
|
59 local function set(config_table, host, key, value) |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
60 if host and key then |
6712
29d5875ae38d
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6326
diff
changeset
|
61 local hostconfig = rawget(config_table, host); |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 if not hostconfig then |
6712
29d5875ae38d
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6326
diff
changeset
|
63 hostconfig = rawset(config_table, host, setmetatable({}, host_mt))[host]; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 end |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
65 hostconfig[key] = value; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 return true; |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 return false; |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
71 function _M.set(host, key, value, _oldvalue) |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
72 if key == "core" then |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
73 key, value = value, _oldvalue; --COMPAT with code that still uses "core" |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
74 end |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
75 return set(config, host, key, value); |
3573
f31fa6520a4b
configmanager: Atomic reloads, and some other internal changes to achieve this
Matthew Wild <mwild1@gmail.com>
parents:
3515
diff
changeset
|
76 end |
f31fa6520a4b
configmanager: Atomic reloads, and some other internal changes to achieve this
Matthew Wild <mwild1@gmail.com>
parents:
3515
diff
changeset
|
77 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6718
diff
changeset
|
78 function _M.load(filename, config_format) |
6713
b628870b1bd6
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6712
diff
changeset
|
79 config_format = config_format or filename:match("%w+$"); |
466
0ecfd89c2cc0
Fix for configmanager when config file can't be found
Matthew Wild <mwild1@gmail.com>
parents:
376
diff
changeset
|
80 |
8153
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
81 if config_format == "lua" then |
466
0ecfd89c2cc0
Fix for configmanager when config file can't be found
Matthew Wild <mwild1@gmail.com>
parents:
376
diff
changeset
|
82 local f, err = io.open(filename); |
2552
8dda55217e83
configmanager: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents:
2427
diff
changeset
|
83 if f then |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
84 local new_config = setmetatable({ ["*"] = { } }, config_mt); |
8153
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
85 local ok, err = parser.load(f:read("*a"), filename, new_config); |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 f:close(); |
3613
f617718d2221
configmanager: Change parser API again to pass a config table to insert settings to. Fixes Include(). (Thanks Zash/answerman)
Matthew Wild <mwild1@gmail.com>
parents:
3610
diff
changeset
|
87 if ok then |
3573
f31fa6520a4b
configmanager: Atomic reloads, and some other internal changes to achieve this
Matthew Wild <mwild1@gmail.com>
parents:
3515
diff
changeset
|
88 config = new_config; |
1000
a73715a9267f
core.configmanager: Fire event when (re)loading config file
Matthew Wild <mwild1@gmail.com>
parents:
913
diff
changeset
|
89 end |
3780
791aede977da
configmanager: Switch back to returning 'ok' to signal config load success - fixes config errors not being displayed
Matthew Wild <mwild1@gmail.com>
parents:
3613
diff
changeset
|
90 return ok, "parser", err; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 end |
793
55add3b87c01
Report errors in the config file to the user
Matthew Wild <mwild1@gmail.com>
parents:
760
diff
changeset
|
92 return f, "file", err; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 end |
466
0ecfd89c2cc0
Fix for configmanager when config file can't be found
Matthew Wild <mwild1@gmail.com>
parents:
376
diff
changeset
|
94 |
6713
b628870b1bd6
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6712
diff
changeset
|
95 if not config_format then |
793
55add3b87c01
Report errors in the config file to the user
Matthew Wild <mwild1@gmail.com>
parents:
760
diff
changeset
|
96 return nil, "file", "no parser specified"; |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
97 else |
6713
b628870b1bd6
configmanager: Rename variable to avoid name conflict [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6712
diff
changeset
|
98 return nil, "file", "no parser for "..(config_format); |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
99 end |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 end |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 |
12440
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
102 function _M.files() |
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
103 return files; |
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
104 end |
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
105 |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
106 -- Built-in Lua parser |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 do |
6714
429068c24ea0
configmanager: Remove unnecessary function localizations [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6713
diff
changeset
|
108 local pcall = _G.pcall; |
9875
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
109 local function get_line_number(config_file) |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
110 local tb = get_traceback_table(nil, 2); |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
111 for i = 1, #tb do |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
112 if tb[i].info.short_src == config_file then |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
113 return tb[i].info.currentline; |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
114 end |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
115 end |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
116 end |
8153
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
117 parser = {}; |
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
118 function parser.load(data, config_file, config_table) |
9875
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
119 local set_options = {}; -- set_options[host.."/"..option_name] = true (when the option has been set already in this file) |
9874
c9f5ccdcdf80
configmanager: Add support for returning warnings
Matthew Wild <mwild1@gmail.com>
parents:
9241
diff
changeset
|
120 local warnings = {}; |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
121 local env; |
750
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
122 -- The ' = true' are needed so as not to set off __newindex when we assign the functions below |
2975
c1a2e210f47e
configmanager: Fix very wacky indentation
Matthew Wild <mwild1@gmail.com>
parents:
2974
diff
changeset
|
123 env = setmetatable({ |
3012 | 124 Host = true, host = true, VirtualHost = true, |
125 Component = true, component = true, | |
3610
2084959d4096
configmanager: Update Include and RunScript directives to support paths relative to the (current!) config file
Matthew Wild <mwild1@gmail.com>
parents:
3609
diff
changeset
|
126 Include = true, include = true, RunScript = true }, { |
6717
4fecfc81dac1
configmanager: Rename unused function arguments [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6716
diff
changeset
|
127 __index = function (_, k) |
9241
2d82a926826f
configmanager: Allow referencing environment variables in the config as as ENV_<name>
Matthew Wild <mwild1@gmail.com>
parents:
8692
diff
changeset
|
128 if k:match("^ENV_") then |
2d82a926826f
configmanager: Allow referencing environment variables in the config as as ENV_<name>
Matthew Wild <mwild1@gmail.com>
parents:
8692
diff
changeset
|
129 return os.getenv(k:sub(5)); |
2d82a926826f
configmanager: Allow referencing environment variables in the config as as ENV_<name>
Matthew Wild <mwild1@gmail.com>
parents:
8692
diff
changeset
|
130 end |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5124
diff
changeset
|
131 return rawget(_G, k); |
2975
c1a2e210f47e
configmanager: Fix very wacky indentation
Matthew Wild <mwild1@gmail.com>
parents:
2974
diff
changeset
|
132 end, |
6717
4fecfc81dac1
configmanager: Rename unused function arguments [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6716
diff
changeset
|
133 __newindex = function (_, k, v) |
9875
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
134 local host = env.__currenthost or "*"; |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
135 local option_path = host.."/"..k; |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
136 if set_options[option_path] then |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
137 t_insert(warnings, ("%s:%d: Duplicate option '%s'"):format(config_file, get_line_number(config_file), k)); |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
138 end |
99291e124449
configmanager: Emit warning for duplicated config options
Matthew Wild <mwild1@gmail.com>
parents:
9874
diff
changeset
|
139 set_options[option_path] = true; |
6717
4fecfc81dac1
configmanager: Rename unused function arguments [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6716
diff
changeset
|
140 set(config_table, env.__currenthost or "*", k, v); |
2975
c1a2e210f47e
configmanager: Fix very wacky indentation
Matthew Wild <mwild1@gmail.com>
parents:
2974
diff
changeset
|
141 end |
c1a2e210f47e
configmanager: Fix very wacky indentation
Matthew Wild <mwild1@gmail.com>
parents:
2974
diff
changeset
|
142 }); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
143 |
1615
0e3eacf135f2
configmanager: Default options appearing before Host "*" to global (fixes potential traceback)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
144 rawset(env, "__currenthost", "*") -- Default is global |
3011
1189a29cd846
configmanager: Add VirtualHost as an alias for Host (re-applied in trunk due to previous bad merge with 0.7)
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
145 function env.VirtualHost(name) |
10374
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
146 if not name then |
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
147 error("Host must have a name", 2); |
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
148 end |
10375
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
149 local prepped_name = nameprep(name); |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
150 if not prepped_name then |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
151 error(format("Name of Host %q contains forbidden characters", name), 0); |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
152 end |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
153 name = prepped_name; |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
154 if rawget(config_table, name) and rawget(config_table[name], "component_module") then |
2861
1402615b66f8
configmanager: Error when a component and host clash hostnames
Matthew Wild <mwild1@gmail.com>
parents:
1777
diff
changeset
|
155 error(format("Host %q clashes with previously defined %s Component %q, for services use a sub-domain like conference.%s", |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
156 name, config_table[name].component_module:gsub("^%a+$", { component = "external", muc = "MUC"}), name, name), 0); |
2861
1402615b66f8
configmanager: Error when a component and host clash hostnames
Matthew Wild <mwild1@gmail.com>
parents:
1777
diff
changeset
|
157 end |
376
6d87944df37c
New configmanager. Old-style config files still work, but will print a warning
Matthew Wild <mwild1@gmail.com>
parents:
371
diff
changeset
|
158 rawset(env, "__currenthost", name); |
750
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
159 -- Needs at least one setting to logically exist :) |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
160 set(config_table, name or "*", "defined", true); |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
161 return function (config_options) |
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
162 rawset(env, "__currenthost", "*"); -- Return to global scope |
12448
fb7e76c1ad1c
configmanager: Clearer errors when providing unexpected values after VirtualHost (fixes #1735, thanks arawaks)
Matthew Wild <mwild1@gmail.com>
parents:
12440
diff
changeset
|
163 if type(config_options) == "string" then |
fb7e76c1ad1c
configmanager: Clearer errors when providing unexpected values after VirtualHost (fixes #1735, thanks arawaks)
Matthew Wild <mwild1@gmail.com>
parents:
12440
diff
changeset
|
164 error(format("VirtualHost entries do not accept a module name (module '%s' provided for host '%s')", config_options, name), 2); |
fb7e76c1ad1c
configmanager: Clearer errors when providing unexpected values after VirtualHost (fixes #1735, thanks arawaks)
Matthew Wild <mwild1@gmail.com>
parents:
12440
diff
changeset
|
165 elseif type(config_options) ~= "table" then |
fb7e76c1ad1c
configmanager: Clearer errors when providing unexpected values after VirtualHost (fixes #1735, thanks arawaks)
Matthew Wild <mwild1@gmail.com>
parents:
12440
diff
changeset
|
166 error("Invalid syntax following VirtualHost, expected options but received a "..type(config_options), 2); |
fb7e76c1ad1c
configmanager: Clearer errors when providing unexpected values after VirtualHost (fixes #1735, thanks arawaks)
Matthew Wild <mwild1@gmail.com>
parents:
12440
diff
changeset
|
167 end |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
168 for option_name, option_value in pairs(config_options) do |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
169 set(config_table, name or "*", option_name, option_value); |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
170 end |
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
171 end; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 end |
3011
1189a29cd846
configmanager: Add VirtualHost as an alias for Host (re-applied in trunk due to previous bad merge with 0.7)
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
173 env.Host, env.host = env.VirtualHost, env.VirtualHost; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
174 |
750
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
175 function env.Component(name) |
10374
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
176 if not name then |
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
177 error("Component must have a name", 2); |
a83233559253
core.configmanager: Ensure Hosts are given names
Kim Alvefur <zash@zash.se>
parents:
10206
diff
changeset
|
178 end |
10375
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
179 local prepped_name = nameprep(name); |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
180 if not prepped_name then |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
181 error(format("Name of Component %q contains forbidden characters", name), 0); |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
182 end |
3d0adbc74c39
core.configmanager: Handle nameprep validation errors
Kim Alvefur <zash@zash.se>
parents:
10374
diff
changeset
|
183 name = prepped_name; |
7947
24170d74b00b
core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6779
diff
changeset
|
184 if rawget(config_table, name) and rawget(config_table[name], "defined") |
24170d74b00b
core: Split some very long lines [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6779
diff
changeset
|
185 and not rawget(config_table[name], "component_module") then |
12083
ec21e379c145
configmanager: Update error message to say 'VirtualHost' instead of 'Host'
Matthew Wild <mwild1@gmail.com>
parents:
10375
diff
changeset
|
186 error(format("Component %q clashes with previously defined VirtualHost %q, for services use a sub-domain like conference.%s", |
2861
1402615b66f8
configmanager: Error when a component and host clash hostnames
Matthew Wild <mwild1@gmail.com>
parents:
1777
diff
changeset
|
187 name, name, name), 0); |
1402615b66f8
configmanager: Error when a component and host clash hostnames
Matthew Wild <mwild1@gmail.com>
parents:
1777
diff
changeset
|
188 end |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
189 set(config_table, name, "component_module", "component"); |
913
3e2dac84017d
core.configmanager: Make components use 'component' module by default if none specified
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
190 -- Don't load the global modules by default |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
191 set(config_table, name, "load_global_modules", false); |
913
3e2dac84017d
core.configmanager: Make components use 'component' module by default if none specified
Matthew Wild <mwild1@gmail.com>
parents:
896
diff
changeset
|
192 rawset(env, "__currenthost", name); |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
193 local function handle_config_options(config_options) |
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
194 rawset(env, "__currenthost", "*"); -- Return to global scope |
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
195 for option_name, option_value in pairs(config_options) do |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
196 set(config_table, name or "*", option_name, option_value); |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
197 end |
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
198 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
199 |
750
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
200 return function (module) |
857
49298263f241
core.configmanager: Small fix to check validity of Component definitions
Matthew Wild <mwild1@gmail.com>
parents:
795
diff
changeset
|
201 if type(module) == "string" then |
6716
2b78754b0f1c
configmanager: Rename variable to avoid name conflicts [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6715
diff
changeset
|
202 set(config_table, name, "component_module", module); |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
203 return handle_config_options; |
857
49298263f241
core.configmanager: Small fix to check validity of Component definitions
Matthew Wild <mwild1@gmail.com>
parents:
795
diff
changeset
|
204 end |
3515
bb494c3aa364
configmanager: Allow VirtualHost/Component definitions to be followed by a table of config options
Matthew Wild <mwild1@gmail.com>
parents:
3384
diff
changeset
|
205 return handle_config_options(module); |
750
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
206 end |
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
207 end |
fbfcf8c1c830
configmanager: Add support for defining components
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
208 env.component = env.Component; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
209 |
5413
0bf5e90be086
configmanager: Some cleanup, remove unused variables and imports
Matthew Wild <mwild1@gmail.com>
parents:
5380
diff
changeset
|
210 function env.Include(file) |
6718
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
211 -- Check whether this is a wildcard Include |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
212 if file:match("[*?]") then |
6166
46cb87d531a7
configmanager: Delay importing LuaFileSystem until needed by an Include line
Kim Alvefur <zash@zash.se>
parents:
5811
diff
changeset
|
213 local lfs = deps.softreq "lfs"; |
46cb87d531a7
configmanager: Delay importing LuaFileSystem until needed by an Include line
Kim Alvefur <zash@zash.se>
parents:
5811
diff
changeset
|
214 if not lfs then |
46cb87d531a7
configmanager: Delay importing LuaFileSystem until needed by an Include line
Kim Alvefur <zash@zash.se>
parents:
5811
diff
changeset
|
215 error(format("Error expanding wildcard pattern in Include %q - LuaFileSystem not available", file)); |
46cb87d531a7
configmanager: Delay importing LuaFileSystem until needed by an Include line
Kim Alvefur <zash@zash.se>
parents:
5811
diff
changeset
|
216 end |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
217 local path_pos, glob = file:match("()([^"..path_sep.."]+)$"); |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
218 local path = file:sub(1, math_max(path_pos-2,0)); |
3929
7cb03d67101b
configmanager: Filenames without a path are also relative to the config file path, not the current working directory
Matthew Wild <mwild1@gmail.com>
parents:
3905
diff
changeset
|
219 local config_path = config_file:gsub("[^"..path_sep.."]+$", ""); |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
220 if #path > 0 then |
3929
7cb03d67101b
configmanager: Filenames without a path are also relative to the config file path, not the current working directory
Matthew Wild <mwild1@gmail.com>
parents:
3905
diff
changeset
|
221 path = resolve_relative_path(config_path, path); |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
222 else |
3929
7cb03d67101b
configmanager: Filenames without a path are also relative to the config file path, not the current working directory
Matthew Wild <mwild1@gmail.com>
parents:
3905
diff
changeset
|
223 path = config_path; |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
224 end |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
225 local patt = glob_to_pattern(glob); |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
226 for f in lfs.dir(path) do |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
227 if f:sub(1,1) ~= "." and f:match(patt) then |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
228 env.Include(path..path_sep..f); |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
229 end |
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
230 end |
6718
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
231 return; |
794
912dc389935a
Add Include command to include extra configuration files from the main one
Matthew Wild <mwild1@gmail.com>
parents:
793
diff
changeset
|
232 end |
6718
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
233 -- Not a wildcard, so resolve (potentially) relative path and run through config parser |
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
234 file = resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file); |
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
235 local f, err = io.open(file); |
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
236 if f then |
8153
c22d5680ca68
configmanager: Remove support for multiple parsers, fixes #852.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7947
diff
changeset
|
237 local ret, err = parser.load(f:read("*a"), file, config_table); |
6718
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
238 if not ret then error(err:gsub("%[string.-%]", file), 0); end |
9876
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
239 if err then |
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
240 for _, warning in ipairs(err) do |
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
241 t_insert(warnings, warning); |
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
242 end |
d812031c8716
configmanager: Pass through warnings from included files
Matthew Wild <mwild1@gmail.com>
parents:
9875
diff
changeset
|
243 end |
6718
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
244 end |
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
245 if not f then error("Error loading included "..file..": "..err, 0); end |
be98ebe87eef
configmanager: Refactor function to avoid re-declaring local variable [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6717
diff
changeset
|
246 return f, err; |
794
912dc389935a
Add Include command to include extra configuration files from the main one
Matthew Wild <mwild1@gmail.com>
parents:
793
diff
changeset
|
247 end |
912dc389935a
Add Include command to include extra configuration files from the main one
Matthew Wild <mwild1@gmail.com>
parents:
793
diff
changeset
|
248 env.include = env.Include; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
249 |
3610
2084959d4096
configmanager: Update Include and RunScript directives to support paths relative to the (current!) config file
Matthew Wild <mwild1@gmail.com>
parents:
3609
diff
changeset
|
250 function env.RunScript(file) |
3905
9222dad9e1e8
configmanager: Support for wildcards in Include directives
Matthew Wild <mwild1@gmail.com>
parents:
3780
diff
changeset
|
251 return dofile(resolve_relative_path(config_file:gsub("[^"..path_sep.."]+$", ""), file)); |
3610
2084959d4096
configmanager: Update Include and RunScript directives to support paths relative to the (current!) config file
Matthew Wild <mwild1@gmail.com>
parents:
3609
diff
changeset
|
252 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
253 |
5021
85b2689dbcfe
Eliminate direct setfenv usage
Florian Zeitz <florob@babelmonkeys.de>
parents:
4530
diff
changeset
|
254 local chunk, err = envload(data, "@"..config_file, env); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
255 |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 if not chunk then |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 return nil, err; |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
259 |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 local ok, err = pcall(chunk); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
261 |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 if not ok then |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 return nil, err; |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
265 |
12440
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
266 t_insert(files, config_file); |
1ef893715311
configmanager: Add method to report loaded config files (part of #1729 fix)
Matthew Wild <mwild1@gmail.com>
parents:
12083
diff
changeset
|
267 |
9874
c9f5ccdcdf80
configmanager: Add support for returning warnings
Matthew Wild <mwild1@gmail.com>
parents:
9241
diff
changeset
|
268 return true, warnings; |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
269 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5413
diff
changeset
|
270 |
371
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 end |
0dc5819660e8
Import initial configmanager, not sure if it works yet, but it does pass the unit tests ;)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 |
466
0ecfd89c2cc0
Fix for configmanager when config file can't be found
Matthew Wild <mwild1@gmail.com>
parents:
376
diff
changeset
|
273 return _M; |