[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