--- test/simpleupdatetests.py | 119 +++++++++++++++++++++++++++++++++++++++++++++ test/testbase.py | 4 ++ yum/packageSack.py | 9 +++ 3 files changed, 132 insertions(+), 0 deletions(-)
diff --git a/test/simpleupdatetests.py b/test/simpleupdatetests.py index 6bc2efe..6177fb1 100644 --- a/test/simpleupdatetests.py +++ b/test/simpleupdatetests.py @@ -871,3 +871,122 @@ class SimpleUpdateTests(OperationsTests): [pa1, pa2], multi_cmds=True) self.assert_(res=='ok', msg) self.assertResult((pa1, pa2)) + + # Test how update-to != update. + def _setupUpdateTo(self): + foo11 = FakePackage('foo', '1', '1', '0', 'i386') + foo11.addProvides('foobar', 'EQ', ('0', '1', '1')) + foo12 = FakePackage('foo', '1', '2', '0', 'i386') + foo12.addProvides('foobar', 'EQ', ('0', '1', '2')) + foo13 = FakePackage('foo', '1', '3', '0', 'i386') + foo13.addProvides('foobar', 'EQ', ('0', '1', '3')) + foo20 = FakePackage('foo', '2', '0', '0', 'i386') + foo20.addProvides('foobar', 'EQ', ('0', '2', '0')) + all = (foo11, foo12, foo13, foo20) + return locals() + + def testUpdateTo1_1(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update', 'foo'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateTo1_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foo'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateTo2_1(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update', 'foo-1-2'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo12'],)) + + def testUpdateTo2_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foo-1-2'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo12'],)) + + def testUpdateTo3_1(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update', 'foo-1-2'], + [pkgs['foo12']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateTo3_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foo-1-2'], + [pkgs['foo12']], + pkgs['all']) + # Nothing to do... + self.assert_(res==0, msg) + + + def testUpdateToProv1_1(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update', 'foobar'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateToProv1_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foobar'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateToProv2_1(self): + pkgs = self._setupUpdateTo() + # This is kind of annoying, maybe even a bug (but an old one) what + # happens is that in "update" we only look for provides matches on + # installed pkgs. ... so we can't see a version mismatch. Thus. we + # don't see any pkgs. + # It also prints an annoying msg. at critical level. So ignoring. + if True: + return + res, msg = self.runOperation(['update', 'foobar = 1-2'], + [pkgs['foo11']], + pkgs['all']) + # self.assert_(res=='ok', msg) + # self.assertResult((pkgs['foo12'],)) + self.assert_(res==0, msg) + + def testUpdateToProv2_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foobar = 1-2'], + [pkgs['foo11']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo12'],)) + + def testUpdateToProv3_1(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update', 'foobar = 1-2'], + [pkgs['foo12']], + pkgs['all']) + self.assert_(res=='ok', msg) + self.assertResult((pkgs['foo20'],)) + + def testUpdateToProv3_2(self): + pkgs = self._setupUpdateTo() + res, msg = self.runOperation(['update-to', 'foobar = 1-2'], + [pkgs['foo12']], + pkgs['all']) + # Nothing to do... + self.assert_(res==0, msg) + diff --git a/test/testbase.py b/test/testbase.py index d9e23f1..12025ce 100644 --- a/test/testbase.py +++ b/test/testbase.py @@ -18,6 +18,8 @@ from yum.rpmsack import RPMDBPackageSack as _rpmdbsack import inspect from rpmUtils import arch from rpmUtils.transaction import initReadOnlyTransaction +import rpmUtils.miscutils + ############################################################# ### Helper classes ########################################## @@ -320,6 +322,8 @@ class FakeRpmDb(packageSack.PackageSack): # convert flags & version for unversioned reqirements if not version: version=(None, None, None) + if type(version) in (str, type(None), unicode): + version = rpmUtils.miscutils.stringToVersion(version) if flags == '0': flags=None for po in self.provides.get(name, []): diff --git a/yum/packageSack.py b/yum/packageSack.py index 153edbb..4af563a 100644 --- a/yum/packageSack.py +++ b/yum/packageSack.py @@ -24,6 +24,7 @@ import re import fnmatch import misc from packages import parsePackages +import rpmUtils.miscutils from rpmUtils.miscutils import compareEVR class PackageSackVersion: @@ -702,6 +703,10 @@ class PackageSack(PackageSackBase): def getProvides(self, name, flags=None, version=(None, None, None)): """return dict { packages -> list of matching provides }""" self._checkIndexes(failure='build') + if version is None: + version = (None, None, None) + elif type(version) in (str, type(None), unicode): + version = rpmUtils.miscutils.stringToVersion(version) result = { } for po in self.provides.get(name, []): hits = po.matchingPrcos('provides', (name, flags, version)) @@ -716,6 +721,10 @@ class PackageSack(PackageSackBase): def getRequires(self, name, flags=None, version=(None, None, None)): """return dict { packages -> list of matching requires }""" self._checkIndexes(failure='build') + if version is None: + version = (None, None, None) + elif type(version) in (str, type(None), unicode): + version = rpmUtils.miscutils.stringToVersion(version) result = { } for po in self.requires.get(name, []): hits = po.matchingPrcos('requires', (name, flags, version)) -- 1.7.3.4 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel