+++ /dev/null
-# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
-
-import re
-import types
-import string
-import xreadlines
-
-from chroot import *
-from util import *
-
-
-def get_poldek_requires():
- # precompile regexps
- name_rx = re.compile(r"\d+\. ([^\s]+)-[^-]+-[^-]+\n")
- req_rx = re.compile(r" req .* --> (.*)\n")
- pkg_name_rx = re.compile(r"([^\s]+)-[^-]+-[^-]+")
-
- # todo: if a and b are sets, then use sets module
- # and intersection method on set object
- def intersect(a, b):
- r = []
- for x in a:
- if x in b: r.append(x)
- return r
-
- # add given req-list to cur_pkg_reqs
- def add_req(reqs):
- if len(reqs) == 1:
- if reqs[0] not in cur_pkg_reqs:
- cur_pkg_reqs.append(reqs[0])
- else:
- did = 0
- for x in cur_pkg_reqs:
- if type(x) is types.ListType:
- i = intersect(x, reqs)
- if len(i) == 0:
- continue
- did = 1
- idx = cur_pkg_reqs.index(x)
- if len(i) == 1:
- if i[0] in cur_pkg_reqs:
- del cur_pkg_reqs[idx]
- else:
- cur_pkg_reqs[idx] = i[0]
- else:
- cur_pkg_reqs[idx] = i
- else:
- if x in reqs:
- return
- if not did:
- cur_pkg_reqs.append(reqs)
-
- pkg_reqs = {}
- cur_pkg_reqs = None
- cur_pkg = None
-
- f = chr_popen("poldek -v -v --verify --unique-pkg-names")
- for l in xreadlines.xreadlines(f):
- m = name_rx.match(l)
- if m:
- if cur_pkg:
- pkg_reqs[cur_pkg] = cur_pkg_reqs
- cur_pkg = m.groups(1)
- if pkg_reqs.has_key(cur_pkg):
- cur_pkg = None
- cur_pkg_reqs = None
- else:
- cur_pkg_reqs = []
- continue
- m = req_rx.match(l)
- if m:
- reqs = []
- for x in string.split(m.group(1)):
- if x in ["RPMLIB_CAP", "NOT", "FOUND", "UNMATCHED"]: continue
- m = pkg_name_rx.match(x)
- if m:
- reqs.append(m.group(1))
- else:
- msg("poldek_reqs: bad pkg name: %s\n" % x)
- if len(reqs) != 0: add_req(reqs)
-
- f.close()
-
- if cur_pkg:
- pkg_reqs[cur_pkg] = cur_pkg_reqs
-
- return pkg_reqs