[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