util/argparse.lua
author Matthew Wild <mwild1@gmail.com>
Wed, 27 Mar 2024 15:35:15 +0000
branch0.12
changeset 13469 54a936345aaa
parent 12481 cc84682b8429
child 13062 766152afc1c9
permissions -rw-r--r--
prosodyctl check: Warn about invalid domain names in the config file This ensures that domain names of virtual hosts and components are valid in XMPP, and that they are encoded correctly.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10655
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local function parse(arg, config)
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
	local short_params = config and config.short_params or {};
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
	local value_params = config and config.value_params or {};
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
	local parsed_opts = {};
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	if #arg == 0 then
12481
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 12479
diff changeset
     8
		return parsed_opts;
10655
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
	end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
	while true do
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
		local raw_param = arg[1];
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
		if not raw_param then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
			break;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
		end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
		local prefix = raw_param:match("^%-%-?");
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
		if not prefix then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
			break;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
		elseif prefix == "--" and raw_param == "--" then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
			table.remove(arg, 1);
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
			break;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
		end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
		local param = table.remove(arg, 1):sub(#prefix+1);
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
		if #param == 1 and short_params then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
			param = short_params[param];
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
		end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
		if not param then
11850
6425dfa3de45 Merge 0.11->trunk
Kim Alvefur <zash@zash.se>
parents: 10940
diff changeset
    29
			return nil, "param-not-found", raw_param;
10655
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
		end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
		local param_k, param_v;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
		if value_params[param] then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
			param_k, param_v = param, table.remove(arg, 1);
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
			if not param_v then
10940
d770435f0f84 util.argparse: Move exiting and error to util.startup
Kim Alvefur <zash@zash.se>
parents: 10655
diff changeset
    36
				return nil, "missing-value", raw_param;
10655
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
			end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
		else
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
			param_k, param_v = param:match("^([^=]+)=(.+)$");
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
			if not param_k then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
				if param:match("^no%-") then
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
					param_k, param_v = param:sub(4), false;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
				else
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
					param_k, param_v = param, true;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
				end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
			end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
		end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
		parsed_opts[param_k] = param_v;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
	end
12481
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 12479
diff changeset
    50
	for i = 1, #arg do
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 12479
diff changeset
    51
		parsed_opts[i] = arg[i];
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 12479
diff changeset
    52
	end
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 12479
diff changeset
    53
	return parsed_opts;
10655
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
end
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
return {
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
	parse = parse;
1196f1e8d178 util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
}