pld-builder.new: PLD_Builder/install.py, PLD_Builder/rpm_builder.py Uninsta...

arekm arekm at pld-linux.org
Sun Aug 10 23:19:31 CEST 2008


Author: arekm                        Date: Sun Aug 10 21:19:31 2008 GMT
Module: pld-builder.new               Tag: HEAD
---- Log message:
Uninstall BuildConflicting packages.

---- Files affected:
pld-builder.new/PLD_Builder:
   install.py (1.1 -> 1.2) , rpm_builder.py (1.63 -> 1.64) 

---- Diffs:

================================================================
Index: pld-builder.new/PLD_Builder/install.py
diff -u pld-builder.new/PLD_Builder/install.py:1.1 pld-builder.new/PLD_Builder/install.py:1.2
--- pld-builder.new/PLD_Builder/install.py:1.1	Sun Aug 10 22:59:29 2008
+++ pld-builder.new/PLD_Builder/install.py	Sun Aug 10 23:19:26 2008
@@ -4,6 +4,7 @@
 import string
 import StringIO
 
+from config import config, init_conf
 import chroot
 import util
 import log
@@ -81,6 +82,41 @@
     logbuf.close()
     return True
 
+def uninstall(conflicting, b):
+    b.log_line("uninstalling conflicting packages")
+    err = close_killset(conflicting)
+    if err != "":
+        util.append_to(b.logfile, err)
+        b.log_line("error: conflicting packages uninstallation failed")
+        return False
+    else:
+        k = string.join(conflicting.keys())
+        b.log_line("removing %s" % k)
+        res = chroot.run("poldek --noask --erase %s" % k, logfile = b.logfile, user = "root")
+        if res != 0:
+            b.log_line("package removal failed")
+            return False
+    return True
+
+def uninstall_self_conflict(b):
+    b.log_line("checking BuildConflict-ing packages")
+    rpmbuild_opt = "%s %s %s" % (b.target_string(), b.kernel_string(), b.bconds_string())
+    f = chroot.popen("cd rpm/SPECS; TMPDIR=%s rpmbuild -bp --nobuild --short-circuit --define 'prep exit 0' %s %s 2>&1" \
+            % (tmpdir, config.nice, rpmbuild_opt, b.spec))
+    rx = re.compile(r".*conflicts with ([^\s]+-[^-]+-[^-]+)\.src$")
+    conflicting = {}
+    for l in f.xreadlines():
+        b.log_line("rpmbuild: %s" % l.rstrip())
+        m = rx.search(l)
+        if m: conflicting[m.group(1)] = 1
+    f.close()
+    if len(conflicting) == 0:
+        b.log_line("no BuildConflicts found")
+    else:
+        if not uninstall(conflicting):
+            return False
+    return True
+
 def install_br(r, b):
     # ignore internal rpm dependencies, see lib/rpmns.c for list
     ignore_br = re.compile(r'^\s*(rpmlib|cpuinfo|getconf|uname|soname|user|group|mounted|diskspace|digest|gnupg|macro|envvar|running|sanitycheck|vcheck|signature|verify|exists|executable|readable|writable)\(.*')
@@ -122,18 +158,8 @@
     if len(conflicting) == 0:
         b.log_line("no conflicts found")
     else:
-        b.log_line("uninstalling conflicting packages")
-        err = close_killset(conflicting)
-        if err != "":
-            util.append_to(b.logfile, err)
-            b.log_line("error: conflicting packages uninstallation failed")
-        else:
-            k = string.join(conflicting.keys())
-            b.log_line("removing %s" % k)
-            res = chroot.run("poldek --noask --erase %s" % k, logfile = b.logfile, user = "root")
-            if res != 0:
-                b.log_line("package removal failed")
-                return res
+        if not uninstall(conflicting):
+            return False
     b.log_line("installing BR: %s" % br)
     res = chroot.run("poldek --noask --caplookup -Q -v --upgrade %s" % br,
             user = "root",

================================================================
Index: pld-builder.new/PLD_Builder/rpm_builder.py
diff -u pld-builder.new/PLD_Builder/rpm_builder.py:1.63 pld-builder.new/PLD_Builder/rpm_builder.py:1.64
--- pld-builder.new/PLD_Builder/rpm_builder.py:1.63	Sun Aug 10 22:59:29 2008
+++ pld-builder.new/PLD_Builder/rpm_builder.py	Sun Aug 10 23:19:26 2008
@@ -118,6 +118,8 @@
             b.log_line("error: build arch check (%s) failed" % cmd)
 
         if not res:
+            if ("no-install-br" not in r.flags) and install.uninstall_self_conflict(b):
+                res = 1
             if ("no-install-br" not in r.flags) and install.install_br(r, b):
                 res = 1
             if not res:
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/pld-builder.new/PLD_Builder/install.py?r1=1.1&r2=1.2&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/pld-builder.new/PLD_Builder/rpm_builder.py?r1=1.63&r2=1.64&f=u



More information about the pld-cvs-commit mailing list