Diff

util/prosodyctl/shell.lua @ 13732:1465b1e305df 13.0

mod_admin_shell, util.prosodyctl.shell: Process command-line args on server-side, with argparse support This allow a shell-command to provide a 'flags' field, which will automatically cause the parameters to be fed through argparse. The rationale is to make it easier for more complex commands to be invoked from the command line (`prosodyctl shell foo bar ...`). Until now they were limited to accepting a list of strings, and any complex argument processing was non-standard and awkward to implement.
author Matthew Wild <mwild1@gmail.com>
date Mon, 17 Feb 2025 17:02:35 +0000
parent 13643:e5f62871e6a5
line wrap: on
line diff
--- a/util/prosodyctl/shell.lua	Mon Feb 17 16:38:48 2025 +0000
+++ b/util/prosodyctl/shell.lua	Mon Feb 17 17:02:35 2025 +0000
@@ -87,17 +87,7 @@
 
 	if arg[1] then
 		if arg[2] then
-			local fmt = { "%s"; ":%s("; ")" };
-			for i = 3, #arg do
-				if arg[i]:sub(1, 1) == ":" then
-					table.insert(fmt, i, ")%s(");
-				elseif i > 3 and fmt[i - 1]:match("%%q$") then
-					table.insert(fmt, i, ", %q");
-				else
-					table.insert(fmt, i, "%q");
-				end
-			end
-			arg[1] = string.format(table.concat(fmt), table.unpack(arg));
+			arg[1] = ("{"..string.rep("%q", #arg, ", ").."}"):format(table.unpack(arg, 1, #arg));
 		end
 
 		client.events.add_handler("connected", function()