[Yum-devel] [PATCH 2/2] Change pkg.verify slightly so that we don't have to init, and add the callback.

seth vidal skvidal at fedoraproject.org
Fri Jul 2 19:34:55 UTC 2010


On Thu, 2010-07-01 at 17:07 -0400, James Antill wrote:
> ---
>  yum/packages.py |   60 +++++++++++++++++++++++++++++++++++++++++++++++-------
>  1 files changed, 52 insertions(+), 8 deletions(-)
> 
> diff --git a/yum/packages.py b/yum/packages.py
> index 3f1f57d..8f160da 100644
> --- a/yum/packages.py
> +++ b/yum/packages.py
> @@ -1578,23 +1578,46 @@ class _RPMVerifyPackageFile(YUMVerifyPackageFile):
>  
> 
>  class YUMVerifyPackage:
> +    """ A holder for YUMVerifyPackageFile objects. """
>      def __init__(self):
> -        self.files = set()
> +        self._files = {}
>  
>      def __contains__(self, fname):
> -        return fname in self.files
> +        """ Note that this checks if a filename is part of the package, and
> +            not a full YUMVerifyPackageFile(). """
> +        return fname in self._files
>  
>      def __iter__(self):
> -        for pf in self.files:
> -            yield pf
> +        for fn in self._files:
> +            yield self._files[fn]
>  
> -    def add(self, *args, **kwargs):
> -        return self.files.add(*args, **kwargs)
> +    def add(self, vpf):
> +        self._files[vpf.filename] = vpf
> +
> +    def remove(self, vpf):
> +        del self._files[vpf.filename]
> +
> +    def discard(self, vpf):
> +        if vpf.filename not in self:
> +            return
> +        self.remove(vpf)
> +
> +    def clear(self):
> +        self._files = {}
>  
> 
>  class _RPMVerifyPackage(YUMVerifyPackage):
>      def __init__(self, fi, def_csum_type, patterns, all):
> -        self.files = set()
> +        YUMVerifyPackage.__init__(self)
> +
> +        self._presetup = (fi, def_csum_type, patterns, all)
> +    def _setup(self):
> +        if not hasattr(self, '_presetup'):
> +            return
> +
> +        (fi, def_csum_type, patterns, all) = self._presetup
> +        del self._presetup
> +
>          for ft in fi:
>              fn = ft[0]
>              if patterns:
> @@ -1608,6 +1631,24 @@ class _RPMVerifyPackage(YUMVerifyPackage):
>  
>              self.add(_RPMVerifyPackageFile(fi, ft, def_csum_type, all))
>  
> +    def __contains__(self, *args, **kwargs):
> +        self._setup()
> +        return YUMVerifyPackage.__contains__(self, *args, **kwargs)
> +    def __iter__(self, *args, **kwargs):
> +        self._setup()
> +        return YUMVerifyPackage.__iter__(self, *args, **kwargs)
> +    def add(self, *args, **kwargs):
> +        self._setup()
> +        return YUMVerifyPackage.add(self, *args, **kwargs)
> +    def remove(self, *args, **kwargs):
> +        self._setup()
> +        return YUMVerifyPackage.remove(self, *args, **kwargs)
> +    # discard uses contains...
> +    def clear(self, *args, **kwargs):
> +        if hasattr(self, '_presetup'):
> +            del self._presetup
> +        return YUMVerifyPackage.clear(self, *args, **kwargs)
> +
>  
>  _installed_repo = FakeRepository('installed')
>  _installed_repo.cost = 0
> @@ -1620,7 +1661,7 @@ class YumInstalledPackage(YumHeaderPackage):
>              self.yumdb_info = yumdb.get_package(self)
>  
>      def verify(self, patterns=[], deps=False, script=False,
> -               fake_problems=True, all=False, fast=False):
> +               fake_problems=True, all=False, fast=False, callback=None):
>          """verify that the installed files match the packaged checksum
>             optionally verify they match only if they are in the 'pattern' list
>             returns a tuple """
> @@ -1642,6 +1683,9 @@ class YumInstalledPackage(YumHeaderPackage):
>  
>          pfs = _RPMVerifyPackage(fi, csum_type, patterns, all)
>  
> +        if callback is not None:
> +            pfs = callback(pfs)
> +
>          for pf in pfs:
>              fn = pf.filename
>              ftypes = list(pf.rpmfile_types)

ACK

-sv




More information about the Yum-devel mailing list