[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