]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - PLD_Builder/poldek.py
Switch to https for client/request handler server and between builders communication...
[projects/pld-builder.new.git] / PLD_Builder / poldek.py
CommitLineData
dfff8bd5
MM
1# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
b03a96bc
MM
3import re
4import types
5import string
6import xreadlines
7
8from chroot import *
9from util import *
10
11
12def get_poldek_requires():
dfff8bd5
MM
13 # precompile regexps
14 name_rx = re.compile(r"\d+\. ([^\s]+)-[^-]+-[^-]+\n")
15 req_rx = re.compile(r" req .* --> (.*)\n")
16 pkg_name_rx = re.compile(r"([^\s]+)-[^-]+-[^-]+")
b03a96bc 17
dfff8bd5
MM
18 # todo: if a and b are sets, then use sets module
19 # and intersection method on set object
20 def intersect(a, b):
21 r = []
e6376553 22 for x in a:
dfff8bd5
MM
23 if x in b: r.append(x)
24 return r
e6376553 25
dfff8bd5
MM
26 # add given req-list to cur_pkg_reqs
27 def add_req(reqs):
28 if len(reqs) == 1:
29 if reqs[0] not in cur_pkg_reqs:
30 cur_pkg_reqs.append(reqs[0])
b03a96bc 31 else:
dfff8bd5
MM
32 did = 0
33 for x in cur_pkg_reqs:
34 if type(x) is types.ListType:
35 i = intersect(x, reqs)
36 if len(i) == 0:
37 continue
38 did = 1
39 idx = cur_pkg_reqs.index(x)
40 if len(i) == 1:
41 if i[0] in cur_pkg_reqs:
42 del cur_pkg_reqs[idx]
43 else:
44 cur_pkg_reqs[idx] = i[0]
45 else:
46 cur_pkg_reqs[idx] = i
47 else:
48 if x in reqs:
49 return
50 if not did:
51 cur_pkg_reqs.append(reqs)
e6376553 52
dfff8bd5
MM
53 pkg_reqs = {}
54 cur_pkg_reqs = None
55 cur_pkg = None
e6376553 56
dfff8bd5
MM
57 f = chr_popen("poldek -v -v --verify --unique-pkg-names")
58 for l in xreadlines.xreadlines(f):
59 m = name_rx.match(l)
b03a96bc 60 if m:
dfff8bd5
MM
61 if cur_pkg:
62 pkg_reqs[cur_pkg] = cur_pkg_reqs
63 cur_pkg = m.groups(1)
64 if pkg_reqs.has_key(cur_pkg):
65 cur_pkg = None
66 cur_pkg_reqs = None
67 else:
68 cur_pkg_reqs = []
69 continue
70 m = req_rx.match(l)
71 if m:
72 reqs = []
73 for x in string.split(m.group(1)):
74 if x in ["RPMLIB_CAP", "NOT", "FOUND", "UNMATCHED"]: continue
75 m = pkg_name_rx.match(x)
76 if m:
77 reqs.append(m.group(1))
78 else:
79 msg("poldek_reqs: bad pkg name: %s\n" % x)
80 if len(reqs) != 0: add_req(reqs)
e6376553 81
dfff8bd5 82 f.close()
b03a96bc 83
dfff8bd5
MM
84 if cur_pkg:
85 pkg_reqs[cur_pkg] = cur_pkg_reqs
b03a96bc 86
dfff8bd5 87 return pkg_reqs
This page took 0.623454 seconds and 4 git commands to generate.