[Yum-devel] [PATCH 2/3] Do the pkgmatch_fails negative caching, in _search

James Antill james at and.org
Mon Apr 12 16:21:33 UTC 2010


---
 yum/rpmsack.py |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 179b008..2b932cf 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -986,6 +986,9 @@ class RPMDBPackageSack(PackageSackBase):
 
     def _search(self, name=None, epoch=None, ver=None, rel=None, arch=None):
         '''List of matching packages, to zero or more of NEVRA.'''
+        if name is not None and name in self._pkgmatch_fails:
+            return []
+
         pkgtup = (name, arch, epoch, ver, rel)
         if pkgtup in self._tup2pkg:
             return [self._tup2pkg[pkgtup]]
@@ -996,6 +999,8 @@ class RPMDBPackageSack(PackageSackBase):
         if self._completely_loaded or name in self._pkgnames_loaded:
             if name is not None:
                 pkgs = self._name2pkg.get(name, [])
+                if not pkgs:
+                    self._pkgmatch_fails.add(name)
             else:
                 pkgs = self.returnPkgs()
             for po in pkgs:
@@ -1015,6 +1020,7 @@ class RPMDBPackageSack(PackageSackBase):
             mi = ts.dbMatch()
             self._completely_loaded = True
 
+        done = False
         for hdr in mi:
             if hdr['name'] == 'gpg-pubkey':
                 continue
@@ -1022,6 +1028,7 @@ class RPMDBPackageSack(PackageSackBase):
             #  We create POs out of all matching names, even if we don't return
             # them.
             self._pkgnames_loaded.add(po.name)
+            done = True
 
             for tag in ('arch', 'rel', 'ver', 'epoch'):
                 if loc[tag] is not None and loc[tag] != getattr(po, tag):
@@ -1032,6 +1039,9 @@ class RPMDBPackageSack(PackageSackBase):
         if self.auto_close:
             self.ts.close()
 
+        if not done and name is not None:
+            self._pkgmatch_fails.add(name)
+
         return ret
 
     def _makePackageObject(self, hdr, index):
-- 
1.6.6.1



More information about the Yum-devel mailing list