[Yum-devel] [PATCH 2/7] repoMD: parse delta files, getDelta()
Zdenek Pavlas
zpavlas at redhat.com
Fri Jun 28 15:47:44 UTC 2013
---
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
More information about the Yum-devel
mailing list