[Yum-devel] [PATCH] Fix rpmdb.simpleVersion() to ignore gpg-pubkeys, dito. returnPackages()

James Antill james at and.org
Wed Oct 28 03:20:55 UTC 2009


 Dito. searchPrco() etc.

 Add a new rpmdb only method: rpmdb.returnGPGPubkeyPackages() ... so that
keys-remove can work.
---
 rpmUtils/transaction.py |    4 ++++
 yum/rpmsack.py          |   22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/rpmUtils/transaction.py b/rpmUtils/transaction.py
index 64a272f..df9bebb 100644
--- a/rpmUtils/transaction.py
+++ b/rpmUtils/transaction.py
@@ -122,6 +122,8 @@ class TransactionWrapper:
             
         # prebuild the req dict
         for h in mi:
+            if h['name'] == 'gpg-pubkey':
+                continue
             if not h[rpm.RPMTAG_REQUIRENAME]:
                 continue
             tup = miscutils.pkgTupleFromHeader(h)    
@@ -144,6 +146,8 @@ class TransactionWrapper:
                 yield prov
 
         for h in mi:
+            if h['name'] == 'gpg-pubkey':
+                continue
             preq = 0
             tup = miscutils.pkgTupleFromHeader(h)
             for p in _return_all_provides(h):
diff --git a/yum/rpmsack.py b/yum/rpmsack.py
index 743538d..9a542e5 100644
--- a/yum/rpmsack.py
+++ b/yum/rpmsack.py
@@ -106,6 +106,7 @@ class RPMDBPackageSack(PackageSackBase):
         self._simple_pkgtup_list = []
         self._get_pro_cache = {}
         self._get_req_cache  = {}
+        self._loaded_gpg_keys = False
         self.ts = None
         self.auto_close = False # this forces a self.ts.close() after
                                      # most operations so it doesn't leave
@@ -180,6 +181,8 @@ class RPMDBPackageSack(PackageSackBase):
         mi = ts.dbMatch()
         mi.pattern(tag, rpm.RPMMIRE_GLOB, name)
         for hdr in mi:
+            if hdr['name'] == 'gpg-pubkey':
+                continue
             pkg = self._makePackageObject(hdr, mi.instance())
             if not result.has_key(pkg.pkgid):
                 result[pkg.pkgid] = pkg
@@ -203,6 +206,8 @@ class RPMDBPackageSack(PackageSackBase):
         
         mi = ts.dbMatch('basenames', name)
         for hdr in mi:
+            if hdr['name'] == 'gpg-pubkey':
+                continue
             pkg = self._makePackageObject(hdr, mi.instance())
             if not result.has_key(pkg.pkgid):
                 result[pkg.pkgid] = pkg
@@ -226,6 +231,8 @@ class RPMDBPackageSack(PackageSackBase):
         tag = self.DEP_TABLE[prcotype][0]
         mi = ts.dbMatch(tag, misc.to_utf8(name))
         for hdr in mi:
+            if hdr['name'] == 'gpg-pubkey':
+                continue
             po = self._makePackageObject(hdr, mi.instance())
             result[po.pkgid] = po
         del mi
@@ -334,11 +341,24 @@ class RPMDBPackageSack(PackageSackBase):
             self._completely_loaded = patterns is None
 
         pkgobjlist = self._idx2pkg.values()
+        # Remove gpg-pubkeys, as no sane callers expects/likes them...
+        if self._loaded_gpg_keys:
+            pkgobjlist = [pkg for pkg in pkgobjlist if pkg.name != 'gpg-pubkey']
         if patterns:
             pkgobjlist = parsePackages(pkgobjlist, patterns, not ignore_case)
             pkgobjlist = pkgobjlist[0] + pkgobjlist[1]
         return pkgobjlist
 
+    def returnGPGPubkeyPackages(self):
+        """ Return packages of the gpg-pubkeys ... hacky. """
+        ts = self.readOnlyTS()
+        mi = ts.dbMatch('name', 'gpg-pubkey')
+        ret = []
+        for hdr in mi:
+            self._loaded_gpg_keys = True
+            ret.append(self._makePackageObject(hdr, mi.instance()))
+        return ret
+
     def simpleVersion(self, main_only=False, groups={}):
         """ Return a simple version for all installed packages. """
         def _up_revs(irepos, repoid, rev, pkg, csum):
@@ -492,6 +512,8 @@ class RPMDBPackageSack(PackageSackBase):
             self._completely_loaded = True
 
         for hdr in mi:
+            if hdr['name'] == 'gpg-pubkey':
+                continue
             po = self._makePackageObject(hdr, mi.instance())
             for tag in ('arch', 'rel', 'ver', 'epoch'):
                 if loc[tag] is not None and loc[tag] != getattr(po, tag):
-- 
1.6.2.5



More information about the Yum-devel mailing list