diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2015-07-23 15:48:35 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2015-07-23 15:49:10 +0200 |
commit | 62efd50897c1854c7424c392b691911df2a61d8b (patch) | |
tree | c7771b1b056bc281a3bc6a66be14b4a91215d54b | |
parent | e3b247c49a79b8a03d70ad32b89ba93dd69e6534 (diff) | |
download | aports-62efd50897c1854c7424c392b691911df2a61d8b.tar.bz2 aports-62efd50897c1854c7424c392b691911df2a61d8b.tar.xz |
main/lua-aports: add support for buildrepo plugins
-rw-r--r-- | main/lua-aports/0001-buildrepo-add-support-for-plugins.d.patch | 85 | ||||
-rw-r--r-- | main/lua-aports/0002-buildrepo-refactor.patch | 148 | ||||
-rw-r--r-- | main/lua-aports/APKBUILD | 16 |
3 files changed, 245 insertions, 4 deletions
diff --git a/main/lua-aports/0001-buildrepo-add-support-for-plugins.d.patch b/main/lua-aports/0001-buildrepo-add-support-for-plugins.d.patch new file mode 100644 index 0000000000..d7c78e1e85 --- /dev/null +++ b/main/lua-aports/0001-buildrepo-add-support-for-plugins.d.patch @@ -0,0 +1,85 @@ +From ace87a06e5782b6f7f2235094f32847fe836ea15 Mon Sep 17 00:00:00 2001 +From: Natanael Copa <ncopa@alpinelinux.org> +Date: Wed, 22 Jul 2015 15:57:35 +0200 +Subject: [PATCH 1/2] buildrepo: add support for plugins.d + +Make it possible to add hooks that are execute pre and post build. + +This can be used for posting build error messages, copying build logs +etc. +--- + buildrepo.lua | 34 +++++++++++++++++++++++++++++----- + 1 file changed, 29 insertions(+), 5 deletions(-) + +diff --git a/buildrepo.lua b/buildrepo.lua +index bc0a784..4fb9f12 100755 +--- a/buildrepo.lua ++++ b/buildrepo.lua +@@ -4,6 +4,8 @@ local abuild = require("aports.abuild") + local apkrepo = require("aports.apkrepo") + local lfs = require("lfs") + ++local pluginsdir = "/etc/buildrepo/plugins.d" ++ + local function warn(formatstr, ...) + io.stderr:write(("WARNING: %s\n"):format(formatstr:format(...))) + io.stderr:flush() +@@ -75,6 +77,26 @@ local function skip_aport(aport) + return true + end + ++local function run_plugins(dirpath, func, ...) ++ local a = lfs.attributes(dirpath) ++ if a == nil or a.mode ~= "directory" then ++ return ++ end ++ local flist = {} ++ for f in lfs.dir(dirpath) do ++ if string.match(f, ".lua$") then ++ table.insert(flist, f) ++ end ++ end ++ table.sort(flist) ++ for i = 1,#flist do ++ local m = dofile(dirpath.."/"..flist[i]) ++ if type(m[func]) == "function" then ++ m[func](...) ++ end ++ end ++end ++ + local function build_aport(aport, repodest, logdir) + local success, errmsg = lfs.chdir(aport.dir) + if not success then +@@ -92,10 +114,16 @@ local function build_aport(aport, repodest, logdir) + logredirect = ("> '%s' 2>&1"):format(logfile) + end + local cmd = ("REPODEST='%s' abuild -r -m %s"):format(repodest, logredirect) +- success = os.execute(cmd) ++ run_plugins(pluginsdir, "prebuild", aport, logfile) ++ if opts.n then ++ success = true ++ else ++ success = os.execute(cmd) ++ end + if not success then + err("%s: Failed to build", aport.pkgname) + end ++ run_plugins(pluginsdir, "postbuild", aport, success, logfile) + return success + end + +@@ -136,10 +164,6 @@ 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) +-- +2.4.6 + diff --git a/main/lua-aports/0002-buildrepo-refactor.patch b/main/lua-aports/0002-buildrepo-refactor.patch new file mode 100644 index 0000000000..c140e8d83d --- /dev/null +++ b/main/lua-aports/0002-buildrepo-refactor.patch @@ -0,0 +1,148 @@ +From 62478e8dc18cac0ffc3d30917f057b1d1d75f9f0 Mon Sep 17 00:00:00 2001 +From: Natanael Copa <ncopa@alpinelinux.org> +Date: Wed, 22 Jul 2015 17:00:31 +0200 +Subject: [PATCH 2/2] buildrepo: refactor + +- pass logfile directly to build_aport +- run the plugin hooks from loop +- pass progress status to prebuild plugins +--- + buildrepo.lua | 84 +++++++++++++++++++++++++++++++++++------------------------ + 1 file 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 +-- +2.4.6 + diff --git a/main/lua-aports/APKBUILD b/main/lua-aports/APKBUILD index aed2692f5b..4add2e8159 100644 --- a/main/lua-aports/APKBUILD +++ b/main/lua-aports/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> pkgname=lua-aports pkgver=0.4 -pkgrel=0 +pkgrel=1 pkgdesc="Lua modules for parsing aports tree" url="http://dev.alpinelinux.org/archive/lua-aports/" arch="noarch" @@ -13,6 +13,8 @@ install="" replaces="abuild" subpackages="" source="http://dev.alpinelinux.org/archive/lua-aports/lua-aports-$pkgver.tar.xz + 0001-buildrepo-add-support-for-plugins.d.patch + 0002-buildrepo-refactor.patch " _builddir="$srcdir"/lua-aports-$pkgver @@ -35,6 +37,12 @@ package() { make DESTDIR="$pkgdir" install || return 1 } -md5sums="61abfaedf5d7599d1322e62029b24a3e lua-aports-0.4.tar.xz" -sha256sums="b29670416a476fd390083b1b013c099c727e1c4e56171cc5f7ab767dcf41aacc lua-aports-0.4.tar.xz" -sha512sums="06571ce33872d846c8a72d31c8b8e86ce1824f3ae39875c4fe7dfcc6f69968ebb53b4ce4cf7349a1a717be2572dcea1b79f06d90d03f9fef88cc06703b830273 lua-aports-0.4.tar.xz" +md5sums="61abfaedf5d7599d1322e62029b24a3e lua-aports-0.4.tar.xz +400c3f87e3bfc0cece732ccc7273ab15 0001-buildrepo-add-support-for-plugins.d.patch +45f3610919c1bddea841d4c91bccb3de 0002-buildrepo-refactor.patch" +sha256sums="b29670416a476fd390083b1b013c099c727e1c4e56171cc5f7ab767dcf41aacc lua-aports-0.4.tar.xz +fbee2b352b8a353b4f904a26cc311cc60f79eaa6b1202566a6c311e4c2bb4144 0001-buildrepo-add-support-for-plugins.d.patch +99f971b242b283beea788d3d31d48b5143c1e134ae448c2bf7303b595159c6cf 0002-buildrepo-refactor.patch" +sha512sums="06571ce33872d846c8a72d31c8b8e86ce1824f3ae39875c4fe7dfcc6f69968ebb53b4ce4cf7349a1a717be2572dcea1b79f06d90d03f9fef88cc06703b830273 lua-aports-0.4.tar.xz +0d1bb484c6281b61e1e5b8862b7f73f1f2da9d4bc77260309f8bbd6a9ffd8c733424d42c194593a7434209277284dcf0bf8bea07d6b083df371b462e131cd3c9 0001-buildrepo-add-support-for-plugins.d.patch +0af8a5ed6b57b8d72c4ec3715c02d3d47dc9bf7a88da665b15e2f7cabbe81e8d3b871acea28e85a962c1b2872e921efadb72674f71ef7a8a0ba7d9e5834bb11e 0002-buildrepo-refactor.patch" |