Hi!

More testing fun:

The .whatProvides() method is provided by the RpmSack only. In fact that method should be used anymore anyway. And - ta ta - I still had some patches fixing that issue. It also moves the cheaterlookup to contain package objects insted of pkgtups. Can someone please have a short look at them and commit them?

TIA

Florian
>From 87e0a19487c558439a4b656c6aa37ac416e5ae45 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Wed, 22 Aug 2007 15:59:10 +0200
Subject: [PATCH] use package objects in the cheaterlookup instead of pkgtups

---
 yum/depsolve.py |   23 +++++++++--------------
 1 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/yum/depsolve.py b/yum/depsolve.py
index 4075116..5c0f960 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -273,21 +273,21 @@ class Depsolve(object):
         
         if self.cheaterlookup.has_key((needname, needflags, needversion)):
             self.verbose_logger.log(logginglevels.DEBUG_2, 'Needed Require has already been looked up, cheating')
-            cheater_tup = self.cheaterlookup[(needname, needflags, needversion)]
-            providers = [cheater_tup]
+            cheater_po = self.cheaterlookup[(needname, needflags, needversion)]
+            providers = [cheater_po]
         
         elif self.rpmdb.installed(name=needname):
             txmbrs = self.tsInfo.matchNaevr(name=needname)
             for txmbr in txmbrs:
-                providers.append(txmbr.pkgtup)
+                providers.append(txmbr.po)
 
         else:
             self.verbose_logger.log(logginglevels.DEBUG_2, 'Needed Require is not a package name. Looking up: %s', niceformatneed)
-            providers = self.rpmdb.whatProvides(needname, needflags, needversion)
+            providers = self.rpmdb.getProvides(needname, needflags, needversion)
             
-        for insttuple in providers:
-            inst_str = '%s.%s %s:%s-%s' % insttuple
-            (i_n, i_a, i_e, i_v, i_r) = insttuple
+        for inst_po in providers:
+            inst_str = '%s.%s %s:%s-%s' % inst_po.pkgtup
+            (i_n, i_a, i_e, i_v, i_r) = inst_po.pkgtup
             self.verbose_logger.log(logginglevels.DEBUG_2,
                 'Potential Provider: %s', inst_str)
             thismode = self.tsInfo.getMode(name=i_n, arch=i_a, 
@@ -303,13 +303,8 @@ class Depsolve(object):
                             
             if thismode is not None:
                 needmode = thismode
-                if self.rpmdb.installed(name=i_n, arch=i_a, ver=i_v, 
-                                        epoch=i_e, rel=i_r):
-                    needpo = self.rpmdb.searchPkgTuple(insttuple)[0]
-                else:
-                    needpo = self.getPackageObject(insttuple)
 
-                self.cheaterlookup[(needname, needflags, needversion)] = insttuple
+                self.cheaterlookup[(needname, needflags, needversion)] = inst_po
                 self.verbose_logger.log(logginglevels.DEBUG_2, 'Mode is %s for provider of %s: %s',
                     needmode, niceformatneed, inst_str)
                 break
@@ -321,7 +316,7 @@ class Depsolve(object):
             self.verbose_logger.log(logginglevels.DEBUG_2, 'TSINFO: %s package requiring %s marked as erase',
                 requiringPo, needname)
             txmbr = self.tsInfo.addErase(requiringPo)
-            txmbr.setAsDep(po=needpo)
+            txmbr.setAsDep(po=inst_po)
             checkdeps = 1
         
         if needmode in ['i', 'u']:
-- 
1.5.2.4

>From 4a9187f414fe136d3040bafb17697773e787c4f8 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Wed, 22 Aug 2007 15:58:24 +0200
Subject: [PATCH] move from whatProvides to getProvides in returnInstalledPackagesByDep

---
 yum/__init__.py |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/yum/__init__.py b/yum/__init__.py
index eeeb51e..64f6586 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1738,7 +1738,6 @@ class YumBase(depsolve.Depsolve):
         """Pass in a generic [build]require string and this function will 
            pass back the installed packages it finds providing that dep."""
         
-        results = []
         # parse the string out
         #  either it is 'dep (some operator) e:v-r'
         #  or /file/dep
@@ -1757,14 +1756,8 @@ class YumBase(depsolve.Depsolve):
                 if not SYMBOLFLAGS.has_key(flagsymbol):
                     raise Errors.YumBaseError, 'Invalid version flag'
                 depflags = SYMBOLFLAGS[flagsymbol]
-                
-        pkglist = self.rpmdb.whatProvides(depname, depflags, depver)
-        
-        for pkgtup in pkglist:
-            results.append(self.getInstalledPackageObject(pkgtup))
         
-        return results
-
+        return self.rpmdb.getProvides(depname, depflags, depver).keys()
 
     def _bestPackageFromList(self, pkglist):
         """take list of package objects and return the best package object.
-- 
1.5.2.4

_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to