author | Kim Alvefur <zash@zash.se> |
Wed, 19 Feb 2020 21:38:00 +0100 | |
changeset 10655 | 1196f1e8d178 |
child 10940 | d770435f0f84 |
permissions | -rw-r--r-- |
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 |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
return parsed_opts; |
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 |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
print("Unknown command-line option: "..tostring(param)); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
print("Perhaps you meant to use prosodyctl instead?"); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
os.exit(1); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
|
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
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
|
35 |
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
|
36 |
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
|
37 |
if not param_v then |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
print("Expected a value to follow command-line option: "..raw_param); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
os.exit(1); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
else |
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:match("^([^=]+)=(.+)$"); |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
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
|
44 |
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
|
45 |
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
|
46 |
else |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 |
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
|
48 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 |
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
|
52 |
end |
1196f1e8d178
util.startup: Break out command line argument parsing into util.argparse
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 |
return parsed_opts; |
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 |
} |