[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