summaryrefslogtreecommitdiffstats
path: root/buildrepo.lua
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2015-07-22 17:00:31 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2015-07-22 17:01:39 +0200
commit62478e8dc18cac0ffc3d30917f057b1d1d75f9f0 (patch)
tree8d7e45f418b93bd93cc544b564a81ade443d162a /buildrepo.lua
parentace87a06e5782b6f7f2235094f32847fe836ea15 (diff)
downloadlua-aports-62478e8dc18cac0ffc3d30917f057b1d1d75f9f0.tar.bz2
lua-aports-62478e8dc18cac0ffc3d30917f057b1d1d75f9f0.tar.xz
buildrepo: refactor
- pass logfile directly to build_aport - run the plugin hooks from loop - pass progress status to prebuild plugins
Diffstat (limited to 'buildrepo.lua')
-rwxr-xr-xbuildrepo.lua84
1 files changed, 50 insertions, 34 deletions
diff --git a/buildrepo.lua b/buildrepo.lua
index 4fb9f12..5c4b931 100755
--- a/buildrepo.lua
+++ b/buildrepo.lua
@@ -97,36 +97,54 @@ local function run_plugins(dirpath, func, ...)
end
end
-local function build_aport(aport, repodest, logdir)
+local function plugins_prebuild(...)
+ return run_plugins(pluginsdir, "prebuild", ...)
+end
+
+local function plugins_postbuild(...)
+ return run_plugins(pluginsdir, "postbuild", ...)
+end
+
+local function logfile_path(logdirbase, repo, aport)
+ if logdirbase == nil then
+ return nil
+ end
+ local dir = ("%s/%s/%s"):format(logdirbase, repo, aport.pkgname)
+ if not lfs.attributes(dir) then
+ local path = ""
+ for n in string.gmatch(dir, "[^/]+") do
+ path = path.."/"..n
+ lfs.mkdir(path)
+ end
+ end
+ return ("%s/%s-%s-r%s.log"):format(dir, aport.pkgname, aport.pkgver, aport.pkgrel)
+end
+
+
+local function build_aport(aport, repodest, logfile)
local success, errmsg = lfs.chdir(aport.dir)
if not success then
err("%s", errmsg)
return nil
end
local logredirect = ""
- if logdir ~= nil then
- local dir = ("%s/%s"):format(logdir, aport.pkgname)
- if not lfs.attributes(dir) then
- assert(lfs.mkdir(dir), dir)
- end
- local logfile = ("%s/%s-%s-r%s.log"):format(dir, aport.pkgname, aport.pkgver, aport.pkgrel)
-
+ if logfile ~= nil then
logredirect = ("> '%s' 2>&1"):format(logfile)
end
local cmd = ("REPODEST='%s' abuild -r -m %s"):format(repodest, logredirect)
- run_plugins(pluginsdir, "prebuild", aport, logfile)
- if opts.n then
- success = true
- else
- success = os.execute(cmd)
- end
+ success = os.execute(cmd)
if not success then
err("%s: Failed to build", aport.pkgname)
end
- run_plugins(pluginsdir, "postbuild", aport, success, logfile)
return success
end
+local function log_progress(progress, repo, aport)
+ info("%d/%d %d/%d %s/%s %s-r%s",
+ progress.tried, progress.total,
+ progress.repo_built, progress.repo_total,
+ repo, aport.pkgname, aport.pkgver, aport.pkgrel)
+end
-----------------------------------------------------------------
local opthelp = [[
-a DIR Set the aports base dir to DIR instead of $HOME/aports
@@ -164,6 +182,10 @@ aportsdir = opts.a or ("%s/aports"):format(homedir)
repodest = opts.d or abuild.repodest or ("%s/packages"):format(homedir)
logdirbase = opts.l
+if opts.n then
+ build_aport = function() return true end
+end
+
stats = {}
for _,repo in pairs(args) do
local db = require('aports.db').new(aportsdir, repo)
@@ -199,34 +221,28 @@ for _,repo in pairs(args) do
unsorted[aport.pkgname] = true
end
- if logdirbase ~= nil then
- logdir = ("%s/%s"):format(logdirbase, repo)
- if not lfs.attributes(logdir) then
- assert(lfs.mkdir(logdir), logdir)
- end
- end
-
-- build packages
local built = 0
local tried = 0
for aport in db:each_in_build_order(pkgs) do
+ local logfile = logfile_path(logdirbase, repo, aport)
tried = tried + 1
- local totally_built = stats[repo].relevant_aports - #pkgs + built
+ local progress = { tried = tried, total = #pkgs,
+ repo_built = stats[repo].relevant_aports - #pkgs + built,
+ repo_total = stats[repo].relevant_aports,
+ }
if not db:known_deps_exists(aport) then
warn("%s: Skipped due to missing dependencies", aport.pkgname)
elseif not (opts.s and skip_aport(aport)) then
- info("%d/%d %d/%d %s/%s %s-r%s",
- tried, #pkgs,
- totally_built,
- stats[repo].relevant_aports,
- repo, aport.pkgname,
- aport.pkgver, aport.pkgrel)
- if build_aport(aport, repodest, logdir) then
+ log_progress(progress, repo, aport)
+ plugins_prebuild(aport, progress, logfile)
+ local success = build_aport(aport, repodest, logfile)
+ plugins_postbuild(aport, success, logfile)
+ if success then
built = built + 1
- else
- if not opts.k then
- os.exit(1)
- end
+ end
+ if not success and not opts.k then
+ os.exit(1)
end
end
end