[Yum-devel] [PATCH 2/2] Change pkg.verify slightly so that we don't have to init, and add the callback.
James Antill
james at and.org
Thu Jul 1 21:07:42 UTC 2010
---
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)
--
1.7.0.1
More information about the Yum-devel
mailing list