[Yum-devel] [PATCH] Fix rpmdb.simpleVersion() to ignore gpg-pubkeys, dito. returnPackages()
Seth Vidal
skvidal at fedoraproject.org
Thu Oct 29 16:47:19 UTC 2009
On Tue, 27 Oct 2009, James Antill wrote:
> Dito. searchPrco() etc.
>
> Add a new rpmdb only method: rpmdb.returnGPGPubkeyPackages() ... so that
> keys-remove can work.
ACK in general but does this change any expectations for other api users?
-sv
> ---
> 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
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>
More information about the Yum-devel
mailing list