]>
Commit | Line | Data |
---|---|---|
dfff8bd5 MM |
1 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et |
2 | ||
deda9a51 MM |
3 | import re |
4 | import string | |
5 | ||
6 | import chroot | |
7 | ||
8 | def install_br(r, b): | |
cbaf0a71 AM |
9 | tmpdir = "/tmp/BR." + b.b_id[0:6] |
10 | chroot.run("install -m 700 -d %s" % tmpdir) | |
11 | cmd = "cd rpm/SPECS; TMPDIR=%s rpmbuild --nobuild %s %s 2>&1" \ | |
12 | % (tmpdir, b.bconds_string(), b.spec) | |
dfff8bd5 MM |
13 | f = chroot.popen(cmd) |
14 | rx = re.compile(r"^\s*([^\s]+) .*is needed by") | |
15 | needed = {} | |
16 | b.log_line("checking BR") | |
17 | for l in f.xreadlines(): | |
18 | b.log_line("rpm: %s" % l) | |
19 | m = rx.search(l) | |
20 | if m: needed[m.group(1)] = 1 | |
21 | f.close() | |
cbaf0a71 | 22 | chroot.run("rm -rf %s" % tmpdir) |
dfff8bd5 MM |
23 | if len(needed) == 0: |
24 | b.log_line("no BR needed") | |
25 | return | |
26 | nbr = "" | |
27 | for bre in needed.keys(): | |
28 | nbr = nbr + " " + re.escape(bre) | |
29 | br = string.strip(nbr) | |
caaac412 AM |
30 | b.log_line("updating poldek cache...") |
31 | chroot.run("poldek --up; poldek --upa", | |
32 | user = "root", | |
33 | logfile = b.logfile) | |
34 | # check conflicts in BRed packages | |
35 | b.log_line("checking conflicting packages in BRed packages") | |
36 | f = chroot.popen("poldek --test --caplookup -Q -v --upgrade %s" % br, user = "root") | |
37 | rx = re.compile(r".*conflicts with installed ([^\s]+)") | |
38 | conflicting = {} | |
39 | for l in f.xreadlines(): | |
40 | b.log_line("rpm: %s" % l) | |
41 | m = rx.search(l) | |
42 | if m: conflicting[m.group(1)] = 1 | |
43 | f.close() | |
44 | if len(conflicting) == 0: | |
45 | b.log_line("no conflicts found") | |
46 | else: | |
47 | ncf = "" | |
48 | for cfe in conflicting.keys(): | |
49 | ncf = ncf + " " + re.escape(cfe) | |
50 | cf = string.strip(cfe) | |
51 | b.log_line("uninstalling conflicting packages") | |
52 | res = chroot.run("poldek -Q -v --noask --erase %s" % br, | |
53 | user = "root", | |
54 | logfile = b.logfile) | |
55 | if res != 0: | |
56 | b.log_line("error: conflicting packages uninstallation failed") | |
dfff8bd5 | 57 | b.log_line("installing BR: %s" % br) |
caaac412 AM |
58 | res = chroot.run("poldek --caplookup -Q -v --upgrade %s" % br, |
59 | user = "root", | |
60 | logfile = b.logfile) | |
dfff8bd5 MM |
61 | if res != 0: |
62 | b.log_line("error: BR installation failed") | |
63 | return res |