--- yum/repoMDObject.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/yum/repoMDObject.py b/yum/repoMDObject.py index 97256c6..390a365 100755 --- a/yum/repoMDObject.py +++ b/yum/repoMDObject.py @@ -18,6 +18,7 @@ from yum.misc import cElementTree_iterparse as iterparse from yum.misc import _available_compression, stat_f from Errors import RepoMDError +import re import sys import types from misc import AutoFileChecksums, to_xml @@ -39,6 +40,7 @@ class RepoData: self.dbversion = None self.size = None self.opensize = None + self.delta = None if elem: self.parse(elem) @@ -120,6 +122,7 @@ class RepoMD: self.length = 0 self.revision = None self.tags = {'content' : set(), 'distro' : {}, 'repo': set()} + self.deltas = {} if srcfile: self.parse(srcfile) @@ -147,6 +150,13 @@ class RepoMD: if elem_name == "data": thisdata = RepoData(elem=elem) + + # associate delta files with real metadata + m = re.search('^(.+)\.delta\d+(.*)', thisdata.type) + if m: + full, opts = thisdata.delta = m.groups() + self.deltas.setdefault(full, []).append(thisdata) + old = self.repoData.get(thisdata.type) if (old and old.size and old.size < thisdata.size and old.location[1].rsplit('.', 1)[1] in _available_compression @@ -188,6 +198,14 @@ class RepoMD: else: raise RepoMDError, "requested datatype %s not available" % type + def getDelta(self, type, old_timestamp): + old_timestamp = int(old_timestamp) + for deltamd in self.deltas.get(type) or []: + full, opt = deltamd.delta + ts = int(deltamd.timestamp) + if ts == old_timestamp or 'h' in opt and ts <= old_timestamp: + return deltamd + def dump(self): """dump fun output""" -- 1.7.11.7 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel