diff options
author | Matthew Wild <mwild1@gmail.com> | 2020-01-19 15:26:22 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2020-01-19 15:26:22 +0000 |
commit | ec3865fa9ddf170895884ce531250cb731e783d6 (patch) | |
tree | 90932c8da64ab5f82ae3f1bf80c14f0db34c974c | |
parent | eb7a71a64584c9d83be6a3c4a24efb39a202830a (diff) | |
download | prosody-ec3865fa9ddf170895884ce531250cb731e783d6.tar.gz prosody-ec3865fa9ddf170895884ce531250cb731e783d6.zip |
util.startup: Add startup step for parsing command-line options
-rw-r--r-- | util/startup.lua | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/util/startup.lua b/util/startup.lua index e88ed709..fb898970 100644 --- a/util/startup.lua +++ b/util/startup.lua @@ -12,6 +12,60 @@ local dependencies = require "util.dependencies"; local original_logging_config; +local short_params = { D = "daemonize", F = "no-daemonize" }; +local value_params = { config = true }; + +function startup.parse_args() + local parsed_opts = {}; + + if #arg > 0 and arg[1] ~= "--config" then + while true do + local raw_param = arg[1]; + if not raw_param then + break; + end + + local prefix = raw_param:match("^%-%-?"); + if not prefix then + break; + elseif prefix == "--" and raw_param == "--" then + table.remove(arg, 1); + break; + end + local param = table.remove(arg, 1):sub(#prefix+1); + if #param == 1 then + param = short_params[param]; + end + + if not param then + print("Unknown command-line option: "..tostring(param)); + print("Perhaps you meant to use prosodyctl instead?"); + os.exit(1); + end + + local param_k, param_v; + if value_params[param] then + param_k, param_v = param, table.remove(arg, 1); + if not param_v then + print("Expected a value to follow command-line option: "..raw_param); + os.exit(1); + end + else + param_k, param_v = param:match("^([^=]+)=(.+)$"); + if not param_k then + if param:match("^no%-") then + param_k, param_v = param:sub(4), false; + else + param_k, param_v = param, true; + end + end + end + parsed_opts[param_k] = param_v; + end + end + prosody.opts = parsed_opts; +end + function startup.read_config() local filenames = {}; |