diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-03-30 13:10:06 +0200 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-12-16 13:39:17 +0000 |
commit | d0b3f05eac39a6b323096a8e96b43b6fe9baacad (patch) | |
tree | 4943e166d6c779feba9038ae3fec30af39de517c | |
parent | b51134b01316b9d3e138ea84e406481da358b670 (diff) | |
download | lua-aports-d0b3f05eac39a6b323096a8e96b43b6fe9baacad.tar.bz2 lua-aports-d0b3f05eac39a6b323096a8e96b43b6fe9baacad.tar.xz |
ap/aports.lua: implement recurse_until
will recursively parse all build depends
-rwxr-xr-x | aports.lua | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -103,3 +103,45 @@ 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 visited={} + function recurs(pn) + if pn == nil or visited[pn] or apkdb[pn] == nil then + return false + end + visited[pn] = true + local _, p + for _, p in pairs(apkdb[pn]) do + local d + for d in pairs(all_deps(p)) do + if recurs(d) then + return true + end + end + end + return func(pn) + end + return recurs(pn) +end + |