summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-06-15 10:24:31 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2013-12-16 13:39:17 +0000
commiteb1d2edc8ac7d62728de1e7ae4b7519c09a762c8 (patch)
tree3ac74ae95172f3488b066a545a249be6310b8f9f
parentd0b3f05eac39a6b323096a8e96b43b6fe9baacad (diff)
downloadlua-aports-eb1d2edc8ac7d62728de1e7ae4b7519c09a762c8.tar.bz2
lua-aports-eb1d2edc8ac7d62728de1e7ae4b7519c09a762c8.tar.xz
aports.lua: make api more object oriented
- provide a handle with aports.new(dir) - provide foreach() helper functions
-rwxr-xr-xaports.lua97
1 files changed, 64 insertions, 33 deletions
diff --git a/aports.lua b/aports.lua
index f8a0121..4c57a89 100755
--- a/aports.lua
+++ b/aports.lua
@@ -1,6 +1,6 @@
module(..., package.seeall)
-function split(str)
+local function split(str)
local t = {}
local e
if (str == nil) then
@@ -12,7 +12,7 @@ function split(str)
return t
end
-function split_apkbuild(line)
+local function split_apkbuild(line)
local r = {}
local dir,pkgname, pkgver, pkgrel, arch, depends, makedepends, subpackages, source = string.match(line, "([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*)|([^|]*)")
r.dir = dir
@@ -27,7 +27,7 @@ function split_apkbuild(line)
end
-- parse the APKBUILDs and return an iterator
-function parse_apkbuilds(dirs)
+local function parse_apkbuilds(dirs)
local i,v, p
local str=""
if dirs == nil then
@@ -65,16 +65,28 @@ function parse_apkbuilds(dirs)
end
-function target_packages(pkgdb, pkgname)
- local i,v
- local t = {}
- for i,v in ipairs(pkgdb[pkgname]) do
- table.insert(t, pkgname.."-"..v.pkgver.."-r"..v.pkgrel..".apk")
+
+-- return a key list with makedepends and depends
+function all_deps(p)
+ local m = {}
+ local k,v
+ if p == nil then
+ return m
end
- return t
+ if type(p.depends) == "table" then
+ for k,v in pairs(p.depends) do
+ m[v] = true
+ end
+ end
+ if type(p.makedepends) == "table" then
+ for k,v in pairs(p.makedepends) do
+ m[v] = true
+ end
+ end
+ return m
end
-function init_apkdb(repodirs)
+local function init_apkdb(repodirs)
local pkgdb = {}
local revdeps = {}
local a
@@ -83,6 +95,7 @@ function init_apkdb(repodirs)
if pkgdb[a.pkgname] == nil then
pkgdb[a.pkgname] = {}
end
+ a.all_deps = all_deps
table.insert(pkgdb[a.pkgname], a)
-- add subpackages to package db
local k,v
@@ -93,7 +106,7 @@ function init_apkdb(repodirs)
table.insert(pkgdb[v], a)
end
-- add to reverse dependencies
- for k,v in pairs(a.makedepends) do
+ for v in pairs(all_deps(a)) do
if revdeps[v] == nil then
revdeps[v] = {}
end
@@ -103,29 +116,10 @@ function init_apkdb(repodirs)
return pkgdb, revdeps
end
--- return a key list with makedepends and depends
-function all_deps(p)
- local m = {}
- local k,v
- if p == nil then
- return m
- end
- if type(p.depends) == "table" then
- for k,v in pairs(p.depends) do
- m[v] = true
- end
- end
- if type(p.makedepends) == "table" then
- for k,v in pairs(p.makedepends) do
- m[v] = true
- end
- end
- return m
-end
-
-
-function recurs_until(apkdb, pn, func)
+local Aports = {}
+function Aports:recurs_until(pn, func)
local visited={}
+ local apkdb = self.apks
function recurs(pn)
if pn == nil or visited[pn] or apkdb[pn] == nil then
return false
@@ -145,3 +139,40 @@ function recurs_until(apkdb, pn, func)
return recurs(pn)
end
+function Aports:target_packages(pkgname)
+ local i,v
+ local t = {}
+ for k,v in pairs(self.apks[pkgname]) do
+ table.insert(t, pkgname.."-"..v.pkgver.."-r"..v.pkgrel..".apk")
+ end
+ return t
+end
+
+function Aports:foreach(f)
+ local k,v
+ for k,v in pairs(self.apks) do
+ f(k,v)
+ end
+end
+
+function Aports:foreach_revdep(pkg, f)
+ local k,v
+ for k,v in pairs(self.revdeps[pkg] or {}) do
+ f(k,v)
+ end
+end
+
+function Aports:foreach_pkg(pkg, f)
+ local k,v
+ for k,v in pairs(self.apks[pkg]) do
+ f(k,v)
+ end
+end
+
+function new(repodirs)
+ local h = Aports
+ h.repodirs = repodirs
+ h.apks, h.revdeps = init_apkdb(repodirs)
+ return h
+end
+