[yum-commits] Branch 'yum-3_2_X' - 5 commits - test/simpleupdatetests.py yum/depsolve.py yum/__init__.py
James Antill
james at osuosl.org
Mon May 10 13:59:38 UTC 2010
test/simpleupdatetests.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
yum/__init__.py | 14 +++++++-------
yum/depsolve.py | 20 ++++++++++++++------
3 files changed, 66 insertions(+), 13 deletions(-)
New commits:
commit 720f0141b7f147170bcbf66c19c99b20b8bc4dcb
Author: James Antill <james at and.org>
Date: Sun May 9 23:56:23 2010 -0400
Comment explaining testUpdateRLEvince1 and 2
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index 8232675..df641f7 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -766,6 +766,8 @@ class SimpleUpdateTests(OperationsTests):
self.assertResult((pa1, pa3))
def testUpdateRLEvince1(self):
+ """ This tests a dep. upgrade from a dep. upgrade, with a multilib. pkg.
+ where only half of the multilib. is installed. """
pi1 = FakePackage('evince', '1', '1', '0', 'x86_64')
pi1.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
pi2 = FakePackage('evince-libs', '1', '1', '0', 'x86_64')
@@ -786,6 +788,9 @@ class SimpleUpdateTests(OperationsTests):
self.assertResult((pa1, pa2x, pa3))
def testUpdateRLEvince2(self):
+ """ Dito. testUpdateRLEvince1, except here pa2i is before pa2x, and
+ thus. will be seen first by .update() when it does an
+ archless "find". """
pi1 = FakePackage('evince', '1', '1', '0', 'x86_64')
pi1.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
pi2 = FakePackage('evince-libs', '1', '1', '0', 'x86_64')
commit dace53a1169f0c66c4771f6b9885c12fa6a6a885
Author: James Antill <james at and.org>
Date: Sat May 8 18:06:49 2010 -0400
Fix weird logging error, comma separated values must be expanded
diff --git a/yum/__init__.py b/yum/__init__.py
index b7f7702..9546aec 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -3291,7 +3291,7 @@ class YumBase(depsolve.Depsolve):
for (new, old) in updates:
if self.tsInfo.isObsoleted(pkgtup=old):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
old)
else:
tx_return.extend(self.update(po=self.getPackageObject(new)))
@@ -3400,7 +3400,7 @@ class YumBase(depsolve.Depsolve):
txmbr.setAsDep(requiringPo)
tx_return.append(txmbr)
if self.tsInfo.isObsoleted(obsoleted):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Package is already obsoleted: %s.%s %s:%s-%s'), obsoleted)
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Package is already obsoleted: %s.%s %s:%s-%s') % obsoleted)
else:
txmbr = self.tsInfo.addObsoleted(obsoleted_pkg, available_pkg)
tx_return.append(txmbr)
@@ -3409,7 +3409,7 @@ class YumBase(depsolve.Depsolve):
for updating in self.up.updatesdict.get(installed_pkg.pkgtup, []):
po = self.getPackageObject(updating)
if self.tsInfo.isObsoleted(installed_pkg.pkgtup):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
installed_pkg.pkgtup)
# at this point we are going to mark the pkg to be installed, make sure
# it doesn't obsolete anything. If it does, mark that in the tsInfo, too
@@ -3436,11 +3436,11 @@ class YumBase(depsolve.Depsolve):
continue
for updated in self.up.updating_dict.get(available_pkg.pkgtup, []):
if self.tsInfo.isObsoleted(updated):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
updated)
elif self._newer_update_in_trans(updated, available_pkg,
tx_return):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already updated: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already updated: %s.%s %s:%s-%s') %
updated)
else:
@@ -3462,11 +3462,11 @@ class YumBase(depsolve.Depsolve):
for ipkg in pot_updated:
if self.tsInfo.isObsoleted(ipkg.pkgtup):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
ipkg.pkgtup)
elif self._newer_update_in_trans(ipkg.pkgtup, available_pkg,
tx_return):
- self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already updated: %s.%s %s:%s-%s'),
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already updated: %s.%s %s:%s-%s') %
ipkg.pkgtup)
elif ipkg.verLT(available_pkg):
txmbr = self._add_up_txmbr(requiringPo, available_pkg, ipkg)
commit a148eb3e854a7c170771b61b3d06f78e46c1e9ce
Author: James Antill <james at and.org>
Date: Sat May 8 17:55:02 2010 -0400
Do the second fix, for the previous testcase. Seems correct, but not 100%.
diff --git a/yum/depsolve.py b/yum/depsolve.py
index eb47587..60b4e2f 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -521,10 +521,11 @@ class Depsolve(object):
# find the best one
# try updating the already install pkgs
+ results = []
for pkg in provSack.returnNewestByName():
- results = self.update(requiringPo=requiringPo, name=pkg.name,
- epoch=pkg.epoch, version=pkg.version,
- rel=pkg.rel)
+ tresults = self.update(requiringPo=requiringPo, name=pkg.name,
+ epoch=pkg.epoch, version=pkg.version,
+ rel=pkg.rel)
# Note that this does "interesting" things with multilib. We can
# have say A.i686 and A.x86_64, and if we hit "A.i686" first,
# .update() will actually update "A.x86_64" which will then fail
@@ -533,6 +534,7 @@ class Depsolve(object):
# fails.
# Keeping results through the loop and thus. testing each pkg
# against all txmbr's from previous runs "fixes" this.
+ results.extend(tresults)
for txmbr in results:
if pkg == txmbr.po:
checkdeps = True
commit 1be67b3fa5a15277c94d42c48569edb6b094cb29
Author: James Antill <james at and.org>
Date: Sat May 8 17:50:35 2010 -0400
Add a fix for the _old_ bug, and a comment about another possible fix.
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 17b2ce9..eb47587 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -515,8 +515,6 @@ class Depsolve(object):
if pkgmode in ['i', 'u']:
self.verbose_logger.log(logginglevels.DEBUG_2,
_('%s already in ts, skipping this one'), pkg)
- # FIXME: Remove this line, if it is not needed ?
- # checkdeps = 1
self._last_req = pkg
return checkdeps, missingdep
@@ -527,6 +525,14 @@ class Depsolve(object):
results = self.update(requiringPo=requiringPo, name=pkg.name,
epoch=pkg.epoch, version=pkg.version,
rel=pkg.rel)
+ # Note that this does "interesting" things with multilib. We can
+ # have say A.i686 and A.x86_64, and if we hit "A.i686" first,
+ # .update() will actually update "A.x86_64" which will then fail
+ # the pkg == txmbr.po test below, but then they'll be nothing to
+ # update when we get around to A.x86_64 ... so this entire loop
+ # fails.
+ # Keeping results through the loop and thus. testing each pkg
+ # against all txmbr's from previous runs "fixes" this.
for txmbr in results:
if pkg == txmbr.po:
checkdeps = True
@@ -551,7 +557,6 @@ class Depsolve(object):
return checkdeps, missingdep
-
# FIXME - why can't we look up in the transaction set for the requiringPkg
# and know what needs it that way and provide a more sensible dep structure in the txmbr
inst = self.rpmdb.searchNevra(name=best.name, arch=best.arch)
@@ -562,6 +567,7 @@ class Depsolve(object):
txmbr = self.tsInfo.addUpdate(best, inst[0])
txmbr.setAsDep(po=requiringPo)
txmbr.reason = "dep"
+ checkdeps = True
self._last_req = best
else:
self.verbose_logger.debug(_('TSINFO: Marking %s as install for %s'), best,
commit 37899b9c170ce1a97cd29be6a0a0322f608c4fd6
Author: James Antill <james at and.org>
Date: Sat May 8 17:49:34 2010 -0400
Add a couple of depsolve tests, from a bug I found updating F-13.
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py
index f02cc75..8232675 100644
--- a/test/simpleupdatetests.py
+++ b/test/simpleupdatetests.py
@@ -764,3 +764,43 @@ class SimpleUpdateTests(OperationsTests):
[pa1, pa2, pa4, pa3])
self.assert_(res=='ok', msg)
self.assertResult((pa1, pa3))
+
+ def testUpdateRLEvince1(self):
+ pi1 = FakePackage('evince', '1', '1', '0', 'x86_64')
+ pi1.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
+ pi2 = FakePackage('evince-libs', '1', '1', '0', 'x86_64')
+ pi3 = FakePackage('evince-djvu', '1', '1', '0', 'x86_64')
+ pi3.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
+
+ pa1 = FakePackage('evince', '2', '1', '0', 'x86_64')
+ pa1.addRequires('evince-libs', 'EQ', ('0', '2', '1'))
+ pa2i = FakePackage('evince-libs', '2', '1', '0', 'i686')
+ pa2x = FakePackage('evince-libs', '2', '1', '0', 'x86_64')
+ pa3 = FakePackage('evince-djvu', '2', '1', '0', 'x86_64')
+ pa3.addRequires('evince-libs', 'EQ', ('0', '2', '1'))
+
+ res, msg = self.runOperation(['update', 'evince'],
+ [pi1, pi2, pi3],
+ [pa1, pa2x, pa2i, pa3])
+ self.assert_(res=='ok', msg)
+ self.assertResult((pa1, pa2x, pa3))
+
+ def testUpdateRLEvince2(self):
+ pi1 = FakePackage('evince', '1', '1', '0', 'x86_64')
+ pi1.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
+ pi2 = FakePackage('evince-libs', '1', '1', '0', 'x86_64')
+ pi3 = FakePackage('evince-djvu', '1', '1', '0', 'x86_64')
+ pi3.addRequires('evince-libs', 'EQ', ('0', '1', '1'))
+
+ pa1 = FakePackage('evince', '2', '1', '0', 'x86_64')
+ pa1.addRequires('evince-libs', 'EQ', ('0', '2', '1'))
+ pa2i = FakePackage('evince-libs', '2', '1', '0', 'i686')
+ pa2x = FakePackage('evince-libs', '2', '1', '0', 'x86_64')
+ pa3 = FakePackage('evince-djvu', '2', '1', '0', 'x86_64')
+ pa3.addRequires('evince-libs', 'EQ', ('0', '2', '1'))
+
+ res, msg = self.runOperation(['update', 'evince'],
+ [pi1, pi2, pi3],
+ [pa1, pa2i, pa2x, pa3])
+ self.assert_(res=='ok', msg)
+ self.assertResult((pa1, pa2x, pa3))
More information about the Yum-commits
mailing list