[yum-commits] Branch 'yum-3_2_X' - test/skipbroken-tests.py yum/__init__.py
Tim Lauridsen
timlau at osuosl.org
Tue Nov 11 07:18:46 UTC 2008
test/skipbroken-tests.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++
yum/__init__.py | 35 ++++++++++++++++++++++++-----
2 files changed, 85 insertions(+), 6 deletions(-)
New commits:
commit af4feb628ace315ae37a30fdf55821812453ceea
Author: Tim Lauridsen <timlau at fedoraproject.org>
Date: Tue Nov 11 08:18:37 2008 +0100
make skip-broken handle a case where foo.x86_64 is skipped, and the foo.i386 is pulled in instead (rhbz #470291)
diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
index 968989c..d6f763c 100644
--- a/test/skipbroken-tests.py
+++ b/test/skipbroken-tests.py
@@ -526,6 +526,62 @@ class SkipBrokenTests(DepsolveTests):
self.tsInfo.addUpdate(ur4, oldpo=r4)
self.assertEquals('err', *self.resolveCode(skip=False))
+
+ def testBumpedSoNameMultiArch(self):
+ """
+ if compat-db45.x86_64 get skipped, then compat-db45.i386 should not
+ get pulled in instead
+ """
+ c1 = self.instPackage('cyrus-sasl-lib', '2.1.22',"18", arch='x86_64')
+ c1.addRequires("libdb-4.3.so")
+
+ d1 = self.instPackage('compat-db', '4.6.21',"4", arch='x86_64')
+ d1.addProvides("libdb-4.3.so")
+ od1 = self.repoPackage('compat-db46', '4.6.21',"5", arch='x86_64')
+ od1.addProvides("libdb-4.6.so")
+ od1.addObsoletes("compat-db")
+ od2 = self.repoPackage('compat-db45', '4.6.21',"5", arch='x86_64')
+ od2.addProvides("libdb-4.5.so")
+ od2.addObsoletes("compat-db")
+ od3 = self.repoPackage('compat-db45', '4.6.21',"5", arch='i386')
+ od3.addProvides("libdb-4.5.so")
+ od3.addObsoletes("compat-db")
+
+ r1 = self.instPackage('rpm', '4.6.0-0','0.rc1.3', arch='x86_64')
+ r1.addRequires("libdb-4.5.so")
+ r2 = self.instPackage('rpm-libs', '4.6.0-0','0.rc1.3', arch='x86_64')
+ r2.addRequires("libdb-4.5.so")
+ r3 = self.instPackage('rpm-build', '4.6.0-0','0.rc1.3', arch='x86_64')
+ r3.addRequires("libdb-4.5.so")
+ r4 = self.instPackage('rpm-python', '4.6.0-0','0.rc1.3', arch='x86_64')
+ r4.addRequires("libdb-4.5.so")
+
+ ur1 = self.repoPackage('rpm', '4.6.0-0','0.rc1.5', arch='x86_64')
+ ur1.addRequires("libdb-4.5.so")
+ ur1.addRequires("compat-db45")
+ ur2 = self.repoPackage('rpm-libs', '4.6.0-0','0.rc1.5', arch='x86_64')
+ ur2.addRequires("libdb-4.5.so")
+ ur2.addRequires("compat-db45")
+ ur3 = self.repoPackage('rpm-build', '4.6.0-0','0.rc1.5', arch='x86_64')
+ ur3.addRequires("libdb-4.5.so")
+ ur3.addRequires("compat-db45")
+ ur4 = self.repoPackage('rpm-python', '4.6.0-0','0.rc1.5', arch='x86_64')
+ ur4.addRequires("libdb-4.5.so")
+ ur4.addRequires("compat-db45")
+
+
+ self.tsInfo.addObsoleting(od2, oldpo=d1)
+ self.tsInfo.addObsoleted(d1, od2)
+ self.tsInfo.addObsoleting(od1, oldpo=d1)
+ self.tsInfo.addObsoleted(d1, od1)
+ self.tsInfo.addUpdate(ur1, oldpo=r1)
+ self.tsInfo.addUpdate(ur2, oldpo=r2)
+ self.tsInfo.addUpdate(ur3, oldpo=r3)
+ self.tsInfo.addUpdate(ur4, oldpo=r4)
+
+ self.assertEquals('empty', *self.resolveCode(skip=True))
+ self.assertResult([c1,d1,r1,r2,r3,r4])
+
def resolveCode(self,skip = False):
solver = YumBase()
diff --git a/yum/__init__.py b/yum/__init__.py
index 94e732d..dc19660 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -684,11 +684,16 @@ class YumBase(depsolve.Depsolve):
_remove_from_sack(po)
def _remove_from_sack(po):
- if not po.repoid == 'installed' and po not in removed_from_sack:
- self.verbose_logger.debug('SKIPBROKEN: removing %s from pkgSack & updates' % str(po))
- self.pkgSack.delPackage(po)
- self.up.delPackage(po.pkgtup)
- removed_from_sack.add(po)
+ # get all compatible arch packages from pkgSack
+ # we need to remove them to so a i386 paqckages is not
+ # dragged in when a x86_64 is skipped.
+ pkgs = self._getPackagesToRemoveAllArch(po)
+ for pkg in pkgs:
+ if not po.repoid == 'installed' and pkg not in removed_from_sack:
+ self.verbose_logger.debug('SKIPBROKEN: removing %s from pkgSack & updates' % str(po))
+ self.pkgSack.delPackage(pkg)
+ self.up.delPackage(pkg.pkgtup)
+ removed_from_sack.add(pkg)
# Keep removing packages & Depsolve until all errors is gone
# or the transaction is empty
@@ -780,7 +785,25 @@ class YumBase(depsolve.Depsolve):
if not self.tsInfo.exists(pkg.pkgtup):
self.verbose_logger.debug('SKIPBROKEN: Remove extra obsoleted %s (%s)' % (txmbr.po,pkg) )
self.tsInfo.remove(txmbr.po.pkgtup)
-
+
+ def _getPackagesToRemoveAllArch(self,po):
+ ''' get all compatible arch packages in pkgSack'''
+ pkgs = []
+ if rpmUtils.arch.isMultiLibArch():
+ archs = rpmUtils.arch.getArchList()
+ n,a,e,v,r = po.pkgtup
+ # skip for all compat archs
+ for a in archs:
+ pkgtup = (n,a,e,v,r)
+ matched = self.pkgSack.searchNevra(n,e,v,r,a)
+ pkgs.extend(matched)
+ else:
+ pkgs.append(po)
+ return pkgs
+
+
+
+
def _skipFromTransaction(self,po):
skipped = []
More information about the Yum-commits
mailing list