-- trailing X characters by some random string to create a unique name.
-- This function always succeeds (or aborts immediately).
-- @param template string: template name (optional)
--- @return string: name of the directory
+-- @return Name of the directory (string) or false on error.
+-- @return Error object on failure.
function e2lib.mktempdir(template)
if not template then
template = string.format("%s/e2tmp.%d.XXXXXXXX", e2lib.globals.tmpdir,
local cmd = string.format("mktemp -d '%s'", template)
local mktemp = io.popen(cmd, "r")
if not mktemp then
- e2lib.abort("can't mktemp")
+ return false, err.new("can't mktemp")
end
local tmpdir = mktemp:read()
if not tmpdir then
- e2lib.abort("can't mktemp")
+ return false, err.new("can't mktemp")
end
mktemp:close()
-- register tmpdir for removing with rmtempdirs() later on
assert(type(server) == "string")
assert(type(dir) == "string")
- local emptydir = e2lib.mktempdir()
local stack = {}
local argv = {}
for _,opt in ipairs(opts) do
end
table.insert(argv, "-r")
+ local emptydir, re = e2lib.mktempdir()
+ if not emptydir then
+ return false, re
+ end
+
while dir ~= "/" do
local dest = rsync_quote_remote(user, server, dir .. "/")
local rc, re = rsync_ssh(argv, emptydir .. "/", dest)
p.server = sl.server -- the server
-- create the server side structure
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
+
e2lib.chdir(tmpdir)
local version = string.format("%d\n", p.version)
e2lib.chdir("/")
e2lib.rmtempdir(tmpdir)
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
+
e2lib.chdir(tmpdir)
-- create the initial repository on server side
end
-- fetch project descriptor file
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
+
local location = string.format("%s/version", p.location)
local rc, re = cache.fetch_file(scache, p.server, location, tmpdir, nil,
{ cache = false })
source, archive))
f:close()
-- export the source tree to a temporary directory
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
+
rc, re = cvs.prepare_source(info, sourcename, sourceset, tmpdir)
if not rc then
return false, e:cat(re)
function e2build.unpack_result(info, r, dep, destdir)
local res = info.results[r]
local rc, re
- local tmpdir = e2lib.mktempdir()
local e = err.new("unpacking result failed: %s", dep)
local d = info.results[dep]
if not path then
return false, e:cat(re)
end
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
+
rc, re = e2lib.chdir(tmpdir)
if not rc then
return false, e:cat(re)
local e = err.new("fetching build results from chroot")
-- create a temporary directory to build up the result
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, re
+ end
-- build a stored result structure and store
local rfilesdir = string.format("%s/out", res.build_config.T)
source, archive))
f:close()
-- export the source tree to a temporary directory
- local tmpdir = e2lib.mktempdir()
+ local tmpdir, re = e2lib.mktempdir()
+ if not tmpdir then
+ return false, e:cat(re)
+ end
+
rc, re = svn.prepare_source(info, sourcename, sourceset, tmpdir)
if not rc then
return false, e:cat(re)