Software /
code /
prosody
Changeset
11132:287d0d80aa57
util.prosodyctl: Construct luarocks command line with templates
More flexible and safer wrt escaping
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 05 Oct 2020 21:13:23 +0200 |
parents | 11131:40abef01f4b9 |
children | 11133:624eafed3343 |
files | util/prosodyctl.lua |
diffstat | 1 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/util/prosodyctl.lua Mon Oct 05 20:58:37 2020 +0200 +++ b/util/prosodyctl.lua Mon Oct 05 21:13:23 2020 +0200 @@ -12,6 +12,7 @@ local stringprep = encodings.stringprep; local storagemanager = require "core.storagemanager"; local usermanager = require "core.usermanager"; +local interpolation = require "util.interpolation"; local signal = require "util.signal"; local set = require "util.set"; local lfs = require "lfs"; @@ -224,6 +225,8 @@ end end +local render_cli = interpolation.new("%b{}", function (s) return "'"..s:gsub("'","'\\''").."'" end) + local function call_luarocks(mod, operation) local dir = get_path_custom_plugins(prosody.paths.plugins); if operation == "install" then @@ -232,9 +235,11 @@ show_message("Removing %s from %s", mod, dir); end if operation == "list" then - os.execute("luarocks list --tree='"..dir.."'") + os.execute(render_cli("luarocks list --tree={dir}", {dir = dir})); else - os.execute("luarocks --tree='"..dir.."' --server='http://localhost/' "..operation.." "..mod); + os.execute(render_cli("luarocks {op} --tree={dir} {server&--server={server}} {mod}", { + dir = dir; op = operation; mod = mod; server = "http://localhost/"; + })); end if operation == "install" then show_module_configuration_help(mod);