[yum-cvs] test/skipbroken-tests.py yum/__init__.py

Tim Lauridsen timlau at linux.duke.edu
Wed Dec 12 07:16:18 UTC 2007


 test/skipbroken-tests.py |    4 ++--
 yum/__init__.py          |   19 +++++++++++++++----
 2 files changed, 17 insertions(+), 6 deletions(-)

New commits:
commit 3604d974bce5dcfdb3111eef073fb178876ef8df
Author: Tim Lauridsen <tim at naboo.local>
Date:   Wed Dec 12 08:12:38 2007 +0100

    cleanup skip broken code and fixes some issues

diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
index 3e077e1..8c39961 100644
--- a/test/skipbroken-tests.py
+++ b/test/skipbroken-tests.py
@@ -251,8 +251,8 @@ class SkipBrokenTests(DepsolveTests):
         self.xsack.addPackage(provides2)
         self.tsInfo.addInstall(ipo)
 
-        self.assertEquals('ok', *self.resolveCode(skip=True))
-        self.assertResult([ipo, provides2])
+        self.assertEquals('empty', *self.resolveCode(skip=True))
+        self.assertResult([])
 
     def testOnlyOneRequirementAvailable(self):
         ipo = FakePackage('foo')
diff --git a/yum/__init__.py b/yum/__init__.py
index 9147739..e1799ff 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -596,7 +596,7 @@ class YumBase(depsolve.Depsolve):
         depTree = self._buildDepTree()
         while len(self.po_with_problems) > 0 and rescode == 1:
             startTs = set(self.tsInfo)
-            toRemove = []
+            toRemove = set()
             for po,wpo in self.po_with_problems:
                 # check if the problem is caused by a package in the transaction
                 if not self.tsInfo.exists(po.pkgtup):
@@ -622,17 +622,28 @@ class YumBase(depsolve.Depsolve):
         return rescode, restring
 
     def _buildDepTree(self):
+        ''' create a dictionary with po -> deps and dep -> pos references '''
         depTree = {}
         for txmbr in self.tsInfo:
             if not txmbr.po in depTree.keys():
-                depTree[txmbr.po] = []
+                depTree[txmbr.po] = set()
             for po in (txmbr.updates + txmbr.obsoletes+txmbr.depends_on):
-                depTree[txmbr.po].append(po)
+                # Add po -> dep reference
+                depTree[txmbr.po].add(po)
+                if not po in depTree.keys():
+                    depTree[po] = set()
+                # Add dep -> reference
+                depTree[po].add(txmbr.po)
+                                 
         return depTree
     
     def _getPackagesToRemove(self,po,deptree,toRemove):
+        '''
+        walk trough the po->deps, dep->po's reference tree too get
+        the related po to remove.
+        '''
         if po not in toRemove:
-            toRemove.append(po)       
+            toRemove.add(po)       
         for child in deptree[po]:
             if child not in toRemove:
                 toRemove = self._getPackagesToRemove(child, deptree, toRemove)



More information about the Yum-cvs-commits mailing list