From: Tobias Ulmer Date: Fri, 26 Apr 2013 14:05:16 +0000 (+0200) Subject: Add error handling to e2lib.mktempdir() X-Git-Tag: e2factory-2.3.15rc1~513 X-Git-Url: https://git.e2factory.org/?a=commitdiff_plain;h=d9c0292547125d3e7a413893c094a3a5f1485142;p=e2factory.git Add error handling to e2lib.mktempdir() Signed-off-by: Tobias Ulmer --- diff --git a/generic/e2lib.lua b/generic/e2lib.lua index af7afd0..5b80540 100644 --- a/generic/e2lib.lua +++ b/generic/e2lib.lua @@ -1419,7 +1419,8 @@ end -- 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, @@ -1428,11 +1429,11 @@ function e2lib.mktempdir(template) 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 diff --git a/generic/transport.lua b/generic/transport.lua index 6ca6d9c..ed2ea64 100644 --- a/generic/transport.lua +++ b/generic/transport.lua @@ -97,7 +97,6 @@ local function rsync_ssh_mkdir(opts, user, server, dir) assert(type(server) == "string") assert(type(dir) == "string") - local emptydir = e2lib.mktempdir() local stack = {} local argv = {} for _,opt in ipairs(opts) do @@ -105,6 +104,11 @@ local function rsync_ssh_mkdir(opts, user, server, dir) 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) diff --git a/global/e2-create-project.lua b/global/e2-create-project.lua index 14523f5..4c0bca7 100644 --- a/global/e2-create-project.lua +++ b/global/e2-create-project.lua @@ -103,7 +103,11 @@ local function e2_create_project(arg) 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) @@ -138,7 +142,11 @@ local function e2_create_project(arg) 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 diff --git a/global/e2-fetch-project.lua b/global/e2-fetch-project.lua index ed90ace..2829dd5 100644 --- a/global/e2-fetch-project.lua +++ b/global/e2-fetch-project.lua @@ -108,7 +108,11 @@ local function e2_fetch_project(arg) 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 }) diff --git a/local/cvs.lua b/local/cvs.lua index 278c7ae..ba3357a 100644 --- a/local/cvs.lua +++ b/local/cvs.lua @@ -393,7 +393,11 @@ function cvs.toresult(info, sourcename, sourceset, directory) 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) diff --git a/local/e2build.lua b/local/e2build.lua index edceb04..23b87a6 100644 --- a/local/e2build.lua +++ b/local/e2build.lua @@ -485,7 +485,6 @@ end 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] @@ -505,6 +504,11 @@ function e2build.unpack_result(info, r, dep, destdir) 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) @@ -861,7 +865,10 @@ local function store_result(info, r, return_flags) 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) diff --git a/local/svn.lua b/local/svn.lua index 1ebc35a..08012e4 100644 --- a/local/svn.lua +++ b/local/svn.lua @@ -335,7 +335,11 @@ function svn.toresult(info, sourcename, sourceset, directory) 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)