Annotate

util/argparse.lua @ 10651:1196f1e8d178

util.startup: Break out command line argument parsing into util.argparse This will allow using it from other places such as prosodyctl sub-commands and plugins
author Kim Alvefur <zash@zash.se>
date Wed, 19 Feb 2020 21:38:00 +0100
child 10936:d770435f0f84
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10651
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 }