Florian Festi wrote:
Hi!

I'll post the single changes made to the Depsolver to adjust it to the getProvides/Requires interface. All patches of course require the getProvides patch series.

Has some bugs fixed since the first big patch posted here. As it fixes the broken conflict handling it should probably be backported to the 3.2 series. Anyone interested in doing the work or (applying a patch)?

Btw: There is a performance penalty in this patch, but I don't see a way around it as we really need to check all conflicts not only the new ones.

Florian
--- yum/depsolve.py-2	2007-06-14 14:25:29.000000000 +0200
+++ yum/depsolve.py	2007-06-14 14:27:33.000000000 +0200
@@ -776,6 +776,8 @@
             if len(thisneeds) == 0:
                 self._dcobj.already_seen[txmbr] = 1
             ret.extend(thisneeds)
+
+        ret.extend(self._checkConflicts())
             
         return ret
 
@@ -952,29 +954,6 @@
                 for member in self.tsInfo.getMembersWithState(
                     pkgtup=po.pkgtup, output_states=TS_INSTALL_STATES):
                     member.setAsDep(txmbr.po)
-
-
-        for conflict in txmbr.po.returnPrco('conflicts'):
-            (r, f, v) = conflict
-            txmbrs = self.tsInfo.matchNaevr(name=r)
-            for tx in self.tsInfo.getMembersWithState(output_states = TS_INSTALL_STATES):
-                if tx.name != r and r not in tx.po.provides_names:
-                    continue
-                if tx.po.checkPrco('provides', (r, f, v)):
-                    ret.append( ((txmbr.name, txmbr.version, txmbr.release),
-                                 (r, version_tuple_to_string(v)), flags[f],
-                                 None, rpm.RPMDEP_SENSE_CONFLICTS) )
-
-            inst = self.rpmdb.whatProvides(r, None, None)
-            for pkgtup in inst:
-                txmbrs = self.tsInfo.getMembersWithState(pkgtup,
-                                                         TS_REMOVE_STATES)
-                if not txmbrs:
-                    po = self.getInstalledPackageObject(pkgtup)
-                    if po.checkPrco('provides', (r, f, v)):
-                        ret.append( ((txmbr.name, txmbr.version, txmbr.release),
-                                     (r, version_tuple_to_string(v)), flags[f],
-                                     None, rpm.RPMDEP_SENSE_CONFLICTS) )
                     
         return ret
 
@@ -1069,6 +1048,32 @@
 
         return ret
 
+    def _checkConflicts(self):
+        ret = [ ]
+        for po in self.rpmdb.returnPackages():
+            if self.tsInfo.getMembersWithState(po.pkgtup, output_states=TS_REMOVE_STATES):
+                continue
+            for conflict in po.returnPrco('conflicts') + \
+                    po.returnPrco('obsoletes'):
+                (r, f, v) = conflict
+                for conflicting_po in self.tsInfo.getNewProvides(r, f, v):
+                    if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
+                        continue
+                    ret.append( ((po.name, po.version, po.release),
+                                 (r, version_tuple_to_string(v)), flags[f],
+                                 None, rpm.RPMDEP_SENSE_CONFLICTS) )
+        for txmbr in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
+            po = txmbr.po
+            for conflict in txmbr.po.returnPrco('conflicts'):
+                (r, f, v) = conflict
+                for conflicting_po in self.tsInfo.getNewProvides(r, f, v):
+                    if conflicting_po.pkgtup[0] == po.pkgtup[0] and conflicting_po.pkgtup[2:] == po.pkgtup[2:]:
+                        continue
+                    ret.append( ((po.name, po.version, po.release),
+                                 (r, version_tuple_to_string(v)), flags[f],
+                                 None, rpm.RPMDEP_SENSE_CONFLICTS) )
+        return ret
+    
     def _requiredByPkg(self, prov, pos = []):
         """check to see if anything will or does require the provide, return 
            list of requiring pkg objects if so"""
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to