]> git.e2factory.org Git - e2factory.git/commitdiff
tools: add get_tool_flags_argv()
authorTobias Ulmer <tu@emlix.com>
Mon, 2 Jan 2017 15:11:31 +0000 (16:11 +0100)
committerTobias Ulmer <tu@emlix.com>
Mon, 2 Jan 2017 16:18:18 +0000 (17:18 +0100)
Signed-off-by: Tobias Ulmer <tu@emlix.com>
generic/e2lib.lua
generic/e2option.lua
generic/generic_git.lua
generic/tools.lua
local/e2-help.lua
local/e2build.lua
plugins/cvs.lua
plugins/svn.lua

index 8e38e5b1393e536a881aad4f5bfbd86b65a7bf85..92ea43007fe535a264707156cbcda5d9f9e8aa6d 100644 (file)
@@ -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
index 013540a5ad2bfc62c19d7679c8e1edab0536a59b..43754704ea35ef449b65954c57f063dff18335fd 100644 (file)
@@ -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
 
index d43b9eb77f42b6bcba699ba53965de11ed8acd51..d16b179d09812c91d1a725324e4757de9a98c664 100644 (file)
@@ -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
index 0790f45d41002510d6eeabcf0ecd60d74fec9b19..26b70c55f85c5d9adb432262858f6d1b244fb5ab 100644 (file)
@@ -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.
index 3741b3986b526faab3703cf12f91893ea4097532..cc35f6fa177e388cac3eca4d1af8d97d0becb5e3 100644 (file)
@@ -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))
 
index 6173025ac0b378d59ebd21207757e8ddcb6e4eff..df24daec8696d21d72c72e247f852077f692c8ba 100644 (file)
@@ -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)
index 57b21591c9aaad7ad6a73fc232516d7b0565377e..0d5a73253dc7a8762dc8bc13a0f1b927d1a10a7b 100644 (file)
@@ -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
index 0600742fdb6671d2644f5425b893aa1861e9ec0c..23d4c2b5e75920b4610d74701975559a5da57814 100644 (file)
@@ -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