[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