Hi!

This topic has been discussed several time one the list already. Here is the patch - may be a candidate for the 3.2.1 release.

Florian Festi
Index: yum/depsolve.py
===================================================================
RCS file: /cvsroot/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.168
diff -u -r1.168 depsolve.py
--- yum/depsolve.py	13 Jun 2007 17:52:02 -0000	1.168
+++ yum/depsolve.py	14 Jun 2007 11:39:53 -0000
@@ -768,6 +768,26 @@
             if len(thisneeds) == 0:
                 self._dcobj.already_seen[txmbr] = 1
             ret.extend(thisneeds)
+
+        # check transaction members that got removed from the transaction again
+        for txmbr in self.tsInfo.getRemovedMembers():
+            if self.dcobj.already_seen_removed.has_key(txmbr):
+                continue
+            if self.dsCallback and txmbr.ts_state:
+                if txmbr.ts_state == 'i':
+                    self.dsCallback.pkgAdded(txmbr.pkgtup, 'e')
+                else:
+                    self.dsCallback.pkgAdded(txmbr.pkgtup, 'i')
+
+            self.verbose_logger.log(logginglevels.DEBUG_2,
+                                    "Checking deps for %s" %(txmbr,))
+            if txmbr.output_state in TS_INSTALL_STATES:
+                thisneeds = self._checkRemove(txmbr)
+            elif txmbr.output_state in TS_REMOVE_STATES:
+                thisneeds = self._checkInstall(txmbr)
+            if len(thisneeds) == 0:
+                self.dcobj.already_seen_removed[txmbr] = 1
+            ret.extend(thisneeds)
             
         return ret
 
@@ -1200,7 +1220,8 @@
         self.requires = []
         self.conflicts = []
         self.already_seen = {}
-        
+        self.already_seen_removed = {}
+
     def addRequires(self, po, req_tuple_list):
         # fixme - do checking for duplicates or additions in here to zip things along
         reqobj = Requires(po, req_tuple_list)
Index: yum/transactioninfo.py
===================================================================
RCS file: /cvsroot/yum/cvs/yum/yum/transactioninfo.py,v
retrieving revision 1.41
diff -u -r1.41 transactioninfo.py
--- yum/transactioninfo.py	6 Jun 2007 15:18:55 -0000	1.41
+++ yum/transactioninfo.py	14 Jun 2007 11:39:53 -0000
@@ -33,6 +33,7 @@
         self.probFilterFlags = []
         self.root = '/'
         self.pkgdict = {} # key = pkgtup, val = list of TransactionMember obj
+        self.removedmembers = {}
         self.debug = 0
         self.changed = False
         
@@ -80,6 +81,21 @@
 
         return returnlist
             
+    def getRemovedMembers(self, pkgtup=None):
+        """takes an optional package tuple and returns all transaction members 
+           matching, no pkgtup means it returns all transaction members"""
+        
+        returnlist = []
+
+        if pkgtup is None:
+            for members in self.removedmembers.itervalues():
+                returnlist.extend(members)
+        elif self.removedmembers.has_key(pkgtup):
+            returnlist.extend(self.pkgdict[pkgtup])
+
+        return returnlist
+        
+            
     def getMode(self, name=None, arch=None, epoch=None, ver=None, rel=None):
         """returns the mode of the first match from the transaction set, 
            otherwise, returns None"""
@@ -158,6 +174,7 @@
         for txmbr in self.pkgdict[pkgtup]:
             txmbr.po.state = None
         
+        self.removedmembers.setdefault(pkgtup, []).extend(self.pkgdict[pkgtup])
         del self.pkgdict[pkgtup]
         self.changed = True        
     
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to