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
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
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
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 = {}
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
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.
-- @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))
-- @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")
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)
---
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)
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)
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
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