Comparison

prosodyctl @ 12264:ba712f7559dc

prosodyctl: Use argument parsing library to parse --help, -h, -? Reads nicer, but adds more code. Can always be reverted later I suppose.
author Kim Alvefur <zash@zash.se>
date Fri, 04 Feb 2022 18:56:01 +0100
parent 12103:fc297128c33a
child 12265:47d5233a1fc7
comparison
equal deleted inserted replaced
12263:168970ce8543 12264:ba712f7559dc
56 local dependencies = require "util.dependencies"; 56 local dependencies = require "util.dependencies";
57 local lfs = dependencies.softreq "lfs"; 57 local lfs = dependencies.softreq "lfs";
58 58
59 ----------------------- 59 -----------------------
60 60
61 local parse_args = require "util.argparse".parse;
61 local human_io = require "util.human.io"; 62 local human_io = require "util.human.io";
62 63
63 local show_message, show_warning = prosodyctl.show_message, prosodyctl.show_warning; 64 local show_message, show_warning = prosodyctl.show_message, prosodyctl.show_warning;
64 local show_usage = prosodyctl.show_usage; 65 local show_usage = prosodyctl.show_usage;
65 local read_password = human_io.read_password; 66 local read_password = human_io.read_password;
71 local prosodyctl_timeout = (configmanager.get("*", "prosodyctl_timeout") or 5) * 2; 72 local prosodyctl_timeout = (configmanager.get("*", "prosodyctl_timeout") or 5) * 2;
72 ----------------------- 73 -----------------------
73 local commands = {}; 74 local commands = {};
74 local command = table.remove(arg, 1); 75 local command = table.remove(arg, 1);
75 76
77 local only_help = { short_params = { h = "help"; ["?"] = "help" } }
78
76 function commands.install(arg) 79 function commands.install(arg)
77 if arg[1] == "--help" then 80 local opts = parse_args(arg, only_help);
81 if opts.help or not arg[1] then
78 show_usage([[install]], [[Installs a prosody/luarocks plugin]]); 82 show_usage([[install]], [[Installs a prosody/luarocks plugin]]);
79 return 1; 83 return 1;
80 end 84 end
81 -- TODO finalize config option name 85 -- TODO finalize config option name
82 local server = configmanager.get("*", "plugin_server"); 86 local server = configmanager.get("*", "plugin_server");
93 end 97 end
94 return ret; 98 return ret;
95 end 99 end
96 100
97 function commands.remove(arg) 101 function commands.remove(arg)
98 if arg[1] == "--help" then 102 local opts = parse_args(arg, only_help);
103 if opts.help or not arg[1] then
99 show_usage([[remove]], [[Removes a module installed in the working directory's plugins folder]]); 104 show_usage([[remove]], [[Removes a module installed in the working directory's plugins folder]]);
100 return 1; 105 return 1;
101 end 106 end
102 show_message("Removing %s from %s", arg[1], prosody.paths.installer); 107 show_message("Removing %s from %s", arg[1], prosody.paths.installer);
103 local ret = call_luarocks("remove", arg[1]); 108 local ret = call_luarocks("remove", arg[1]);
104 return ret; 109 return ret;
105 end 110 end
106 111
107 function commands.list(arg) 112 function commands.list(arg)
108 if arg[1] == "--help" then 113 local opts = parse_args(arg, only_help);
114 if opts.help then
109 show_usage([[list]], [[Shows installed rocks]]); 115 show_usage([[list]], [[Shows installed rocks]]);
110 return 1; 116 return 1;
111 end 117 end
112 local ret = call_luarocks("list", arg[1]); 118 local ret = call_luarocks("list", arg[1]);
113 return ret; 119 return ret;
114 end 120 end
115 121
116 function commands.adduser(arg) 122 function commands.adduser(arg)
117 if not arg[1] or arg[1] == "--help" then 123 local opts = parse_args(arg, only_help);
124 if opts.help or not arg[1] then
118 show_usage([[adduser JID]], [[Create the specified user account in Prosody]]); 125 show_usage([[adduser JID]], [[Create the specified user account in Prosody]]);
119 return 1; 126 return 1;
120 end 127 end
121 local user, host = jid_split(arg[1]); 128 local user, host = jid_split(arg[1]);
122 if not user and host then 129 if not user and host then
151 show_message(error_messages[msg]) 158 show_message(error_messages[msg])
152 return 1; 159 return 1;
153 end 160 end
154 161
155 function commands.passwd(arg) 162 function commands.passwd(arg)
156 if not arg[1] or arg[1] == "--help" then 163 local opts = parse_args(arg, only_help);
164 if opts.help or not arg[1] then
157 show_usage([[passwd JID]], [[Set the password for the specified user account in Prosody]]); 165 show_usage([[passwd JID]], [[Set the password for the specified user account in Prosody]]);
158 return 1; 166 return 1;
159 end 167 end
160 local user, host = jid_split(arg[1]); 168 local user, host = jid_split(arg[1]);
161 if not user and host then 169 if not user and host then
190 show_message(error_messages[msg]) 198 show_message(error_messages[msg])
191 return 1; 199 return 1;
192 end 200 end
193 201
194 function commands.deluser(arg) 202 function commands.deluser(arg)
195 if not arg[1] or arg[1] == "--help" then 203 local opts = parse_args(arg, only_help);
204 if opts.help or not arg[1] then
196 show_usage([[deluser JID]], [[Permanently remove the specified user account from Prosody]]); 205 show_usage([[deluser JID]], [[Permanently remove the specified user account from Prosody]]);
197 return 1; 206 return 1;
198 end 207 end
199 local user, host = jid_split(arg[1]); 208 local user, host = jid_split(arg[1]);
200 if not user and host then 209 if not user and host then
248 show_warning(""); 257 show_warning("");
249 end 258 end
250 end 259 end
251 260
252 function commands.start(arg) 261 function commands.start(arg)
253 if arg[1] == "--help" then 262 local opts = parse_args(arg, only_help);
263 if opts.help then
254 show_usage([[start]], [[Start Prosody]]); 264 show_usage([[start]], [[Start Prosody]]);
255 return 1; 265 return 1;
256 end 266 end
257 service_command_warning("start"); 267 service_command_warning("start");
258 local ok, ret = prosodyctl.isrunning(); 268 local ok, ret = prosodyctl.isrunning();
312 show_message(error_messages[ret]) 322 show_message(error_messages[ret])
313 return 1; 323 return 1;
314 end 324 end
315 325
316 function commands.status(arg) 326 function commands.status(arg)
317 if arg[1] == "--help" then 327 local opts = parse_args(arg, only_help);
328 if opts.help then
318 show_usage([[status]], [[Reports the running status of Prosody]]); 329 show_usage([[status]], [[Reports the running status of Prosody]]);
319 return 1; 330 return 1;
320 end 331 end
321 332
322 local ok, ret = prosodyctl.isrunning(); 333 local ok, ret = prosodyctl.isrunning();
346 return 2 357 return 2
347 end 358 end
348 end 359 end
349 360
350 function commands.stop(arg) 361 function commands.stop(arg)
351 if arg[1] == "--help" then 362 local opts = parse_args(arg, only_help);
363 if opts.help then
352 show_usage([[stop]], [[Stop a running Prosody server]]); 364 show_usage([[stop]], [[Stop a running Prosody server]]);
353 return 1; 365 return 1;
354 end 366 end
355 367
356 service_command_warning("stop"); 368 service_command_warning("stop");
383 show_message(error_messages[ret]); 395 show_message(error_messages[ret]);
384 return 1; 396 return 1;
385 end 397 end
386 398
387 function commands.restart(arg) 399 function commands.restart(arg)
388 if arg[1] == "--help" then 400 local opts = parse_args(arg, only_help);
401 if opts.help then
389 show_usage([[restart]], [[Restart a running Prosody server]]); 402 show_usage([[restart]], [[Restart a running Prosody server]]);
390 return 1; 403 return 1;
391 end 404 end
392 405
393 service_command_warning("restart"); 406 service_command_warning("restart");
395 commands.stop(arg); 408 commands.stop(arg);
396 return commands.start(arg); 409 return commands.start(arg);
397 end 410 end
398 411
399 function commands.about(arg) 412 function commands.about(arg)
400 if arg[1] == "--help" then 413 local opts = parse_args(arg, only_help);
414 if opts.help then
401 show_usage([[about]], [[Show information about this Prosody installation]]); 415 show_usage([[about]], [[Show information about this Prosody installation]]);
402 return 1; 416 return 1;
403 end 417 end
404 418
405 local pwd = "."; 419 local pwd = ".";
516 end 530 end
517 print(""); 531 print("");
518 end 532 end
519 533
520 function commands.reload(arg) 534 function commands.reload(arg)
521 if arg[1] == "--help" then 535 local opts = parse_args(arg, only_help);
536 if opts.help then
522 show_usage([[reload]], [[Reload Prosody's configuration and re-open log files]]); 537 show_usage([[reload]], [[Reload Prosody's configuration and re-open log files]]);
523 return 1; 538 return 1;
524 end 539 end
525 540
526 service_command_warning("reload"); 541 service_command_warning("reload");