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