diff options
author | Kim Alvefur <zash@zash.se> | 2022-01-05 04:46:27 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2022-01-05 04:46:27 +0100 |
commit | 21740a1382cfd83686051df3cfcaed48e4ef79d5 (patch) | |
tree | 9045d2db4f0d7af6afbf00c6d63fa00f93e5ba6d /util | |
parent | 9f0a28f1c498a20c51af4686a5ecc9ff1b7c852c (diff) | |
download | prosody-21740a1382cfd83686051df3cfcaed48e4ef79d5.tar.gz prosody-21740a1382cfd83686051df3cfcaed48e4ef79d5.zip |
util.argparse: Add support for repeatable parameters
These are gathered into arrays
Diffstat (limited to 'util')
-rw-r--r-- | util/argparse.lua | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/util/argparse.lua b/util/argparse.lua index bd4eb220..7a55cb0b 100644 --- a/util/argparse.lua +++ b/util/argparse.lua @@ -1,6 +1,7 @@ local function parse(arg, config) local short_params = config and config.short_params or {}; local value_params = config and config.value_params or {}; + local array_params = config and config.array_params or {}; local parsed_opts = {}; @@ -30,7 +31,7 @@ local function parse(arg, config) end local param_k, param_v; - if value_params[param] then + if value_params[param] or array_params[param] then param_k, param_v = param, table.remove(arg, 1); if not param_v then return nil, "missing-value", raw_param; @@ -46,7 +47,15 @@ local function parse(arg, config) end param_k = param_k:gsub("%-", "_"); end - parsed_opts[param_k] = param_v; + if array_params[param] then + if parsed_opts[param_k] then + table.insert(parsed_opts[param_k], param_v); + else + parsed_opts[param_k] = { param_v }; + end + else + parsed_opts[param_k] = param_v; + end end for i = 1, #arg do parsed_opts[i] = arg[i]; |