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