From 6f66b1c33dfabf5a185b070ba7342b51b99bbf81 Mon Sep 17 00:00:00 2001 From: Tobias Ulmer Date: Mon, 2 Jan 2017 16:11:31 +0100 Subject: [PATCH] tools: add get_tool_flags_argv() Signed-off-by: Tobias Ulmer --- generic/e2lib.lua | 26 ++------------------------ generic/e2option.lua | 18 ++---------------- generic/generic_git.lua | 12 +++++++----- generic/tools.lua | 27 +++++++++++++++++++++++++++ local/e2-help.lua | 16 +++------------- local/e2build.lua | 40 +++++++++++++++++++--------------------- plugins/cvs.lua | 13 +------------ plugins/svn.lua | 18 +++--------------- 8 files changed, 64 insertions(+), 106 deletions(-) diff --git a/generic/e2lib.lua b/generic/e2lib.lua index 8e38e5b..92ea430 100644 --- a/generic/e2lib.lua +++ b/generic/e2lib.lua @@ -2048,22 +2048,11 @@ end function e2lib.call_tool_argv(tool, argv, workdir, envdict) local rc, re, cmd, flags, call - cmd, re = tools.get_tool(tool) + cmd, re = tools.get_tool_flags_argv(tool) if not cmd then return false, re end - cmd = { cmd } - - flags, re = tools.get_tool_flags(tool) - if not flags then - return false, re - end - - for _,flag in ipairs(flags) do - table.insert(cmd, flag) - end - for _,arg in ipairs(argv) do table.insert(cmd, arg) end @@ -2163,22 +2152,11 @@ end function e2lib.ssh_remote_cmd(u, argv) local command, rc, re, e, flags, args, stdout, stderr, devnull, fdctv - command, re = tools.get_tool("ssh") + command, re = tools.get_tool_flags_argv("ssh") if not command then return false, re end - command = { command } - - flags, re = tools.get_tool_flags("ssh") - if not flags then - return false, re - end - - for _,flag in ipairs(flags) do - table.insert(command, flag) - end - if u.pass then return false, err.new("ssh_remote_cmd does not support password URL's") end diff --git a/generic/e2option.lua b/generic/e2option.lua index 013540a..4375470 100644 --- a/generic/e2option.lua +++ b/generic/e2option.lua @@ -474,22 +474,8 @@ function e2option.showtoolmanpage() end end - local cmd = {} - local viewer, viewerflags - - viewer = tools.get_tool("man") - if viewer then - table.insert(cmd, viewer) - - viewerflags = tools.get_tool_flags("man") - if viewerflags then - for _,flag in ipairs(viewerflags) do - table.insert(cmd, flag) - end - end - end - - if #cmd == 0 then + local cmd = tools.get_tool_flags_argv("man") + if not cmd then return false, err.new("Could not find manual viewer to display help") end diff --git a/generic/generic_git.lua b/generic/generic_git.lua index d43b9eb..d16b179 100644 --- a/generic/generic_git.lua +++ b/generic/generic_git.lua @@ -120,12 +120,14 @@ end function generic_git.git(argv) local rc, re, e, git, fifo, out - git, re = tools.get_tool("git") + git, re = tools.get_tool_flags_argv("git") if not git then return false, re end - table.insert(argv, 1, git) + for _,arg in ipairs(argv) do + table.insert(git, arg) + end -- fifo contains the last 4 lines, out everything - it's simpler that way. fifo = {} @@ -145,13 +147,13 @@ function generic_git.git(argv) table.insert(out, msg) end - rc, re = e2lib.callcmd_capture(argv, capture) + rc, re = e2lib.callcmd_capture(git, capture) if not rc then - e = new.new("git command %q failed", table.concat(argv, " ")) + e = new.new("git command %q failed", table.concat(git, " ")) return false, e:cat(re), table.concat(out) elseif rc ~= 0 then e = err.new("git command %q failed with exit status %d", - table.concat(argv, " "), rc) + table.concat(git, " "), rc) for _,v in ipairs(fifo) do e:append("%s", v) end diff --git a/generic/tools.lua b/generic/tools.lua index 0790f45..26b70c5 100644 --- a/generic/tools.lua +++ b/generic/tools.lua @@ -146,6 +146,33 @@ function tools.get_tool_flags(name) return flags end +--- Get tool and flags in one vector +-- @param name Tool name (string). +-- @return Vector containing path to tool binary and its flags if any. +-- False on error. +-- @return Error object on failure. +function tools.get_tool_flags_argv(name) + local rc, re, new + + rc, re = tools.get_tool(name) + if not rc then + return false, re + end + + new = { rc } + + rc, re = tools.get_tool_flags(name) + if not rc then + return false, re + end + + for _,flag in ipairs(rc) do + table.insert(new, flag) + end + + return new +end + --- Get tool name. -- @param name Tool name (string). -- @return Tool name field (string) used to find tool in PATH or false on error. diff --git a/local/e2-help.lua b/local/e2-help.lua index 3741b39..cc35f6f 100644 --- a/local/e2-help.lua +++ b/local/e2-help.lua @@ -163,22 +163,12 @@ end -- @return Error object on failure. local function display_man_page(doc) local rc, re, e - local cmd = {} + local cmd - local viewer, re = tools.get_tool("man") - if not viewer then + cmd, re = tools.get_tool_flags_argv("man") + if not cmd then return false, err.new("no man page viewer is available") end - table.insert(cmd, viewer) - - local viewerflags, re = tools.get_tool_flags("man") - if not viewerflags then - return false, re - end - - for _,flag in ipairs(viewerflags) do - table.insert(cmd, flag) - end table.insert(cmd, e2lib.join(doc.path, doc.filename)) diff --git a/local/e2build.lua b/local/e2build.lua index 6173025..df24dae 100644 --- a/local/e2build.lua +++ b/local/e2build.lua @@ -219,7 +219,7 @@ end -- @return True on success, false on error. -- @return Error object on failure. function e2build.build_process_class:_enter_playground(res, return_flags) - local rc, re, e, e2_su, cmd, bc + local rc, re, e, cmd, bc bc = res:build_config() e = err.new("entering playground") @@ -230,16 +230,13 @@ function e2build.build_process_class:_enter_playground(res, return_flags) error(e:cat(re)) end - e2_su = tools.get_tool("e2-su-2.2") - if not e2_su then + cmd, re = tools.get_tool_flags_argv("e2-su-2.2") + if not cmd then return false, e:cat(re) end - cmd = { - e2_su, - "chroot_2_3", - bc.base, - } + table.insert(cmd, "chroot_2_3") + table.insert(cmd, bc.base) if #bc.chroot_call_prefix > 0 then table.insert(cmd, 1, bc.chroot_call_prefix) @@ -762,14 +759,12 @@ end --- function e2build.build_process_class:_runbuild(res, return_flags) - local rc, re, out, bc + local rc, re, out, bc, cmd local e = err.new("build failed") local info = e2tool.info() + e2lib.logf(3, "building %s ...", res:get_name()) - local e2_su, re = tools.get_tool("e2-su-2.2") - if not e2_su then - return false, e:cat(re) - end + bc = res:build_config() -- the build log is written to an external logfile rc, re = e2lib.rotate_log(bc.buildlog) @@ -793,14 +788,17 @@ function e2build.build_process_class:_runbuild(res, return_flags) e2tool.set_umask(info) - local cmd = { - e2_su, - "chroot_2_3", - bc.base, - "/bin/bash", - "-e", "-x", - e2lib.join(bc.Tc, bc.scriptdir, bc.build_driver_file) - } + cmd, re = tools.get_tool_flags_argv("e2-su-2.2") + if not cmd then + return false, e:cat(re) + end + + table.insert(cmd, "chroot_2_3") + table.insert(cmd, bc.base) + table.insert(cmd, "/bin/bash") + table.insert(cmd, "-e") + table.insert(cmd, "-x") + table.insert(cmd, e2lib.join(bc.Tc, bc.scriptdir, bc.build_driver_file)) if #bc.chroot_call_prefix > 0 then table.insert(cmd, 1, bc.chroot_call_prefix) diff --git a/plugins/cvs.lua b/plugins/cvs.lua index 57b2159..0d5a732 100644 --- a/plugins/cvs.lua +++ b/plugins/cvs.lua @@ -58,22 +58,11 @@ cvs.cvs_source = class("cvs_source", source.basic_source) local function cvs_tool(argv, workdir) local rc, re, cvscmd, cvsflags, rsh - cvscmd, re = tools.get_tool("cvs") + cvscmd, re = tools.get_tool_flags_argv("cvs") if not cvscmd then return false, re end - cvscmd = { cvscmd } - - cvsflags, re = tools.get_tool_flags("cvs") - if not cvsflags then - return false, re - end - - for _,flag in ipairs(cvsflags) do - table.insert(cvscmd, flag) - end - for _,arg in ipairs(argv) do table.insert(cvscmd, arg) end diff --git a/plugins/svn.lua b/plugins/svn.lua index 0600742..23d4c2b 100644 --- a/plugins/svn.lua +++ b/plugins/svn.lua @@ -95,28 +95,16 @@ local function svn_tool(argv, workdir) assert(workdir == nil or type(workdir) == "string") local rc, re - local svn, flags, svncmd, out, fifo + local svncmd, out, fifo - svncmd = {} out = {} fifo = {} - svn, re = tools.get_tool("svn") - if not svn then + svncmd, re = tools.get_tool_flags_argv("svn") + if not svncmd then return false, re end - table.insert(svncmd, svn) - - flags, re = tools.get_tool_flags("svn") - if not flags then - return false, re - end - - for _,flag in ipairs(flags) do - table.insert(svncmd, flag) - end - for _,arg in ipairs(argv) do table.insert(svncmd, arg) end -- 2.39.5