[bmap-tools] [PATCH 04/16] BmapCopy: handle bmap format version 2.0

Artem Bityutskiy dedekind1 at gmail.com
Mon Nov 4 03:05:24 EST 2013


From: Artem Bityutskiy <artem.bityutskiy at intel.com>

This patch makes BmapCopy handle bmap format version 2.0, which is identical to
format 1.4. Format 1.4 was released by a mistake. Format 1.4 makes bmaptool
v2.x crash because it has incompatible changes. This is unfurtunate, sorry for
this.

Change-Id: Id26fd9fc807474004dddef0eee0b2028f75c3c41
Signed-off-by: Artem Bityutskiy <artem.bityutskiy at intel.com>
---
 bmaptools/BmapCopy.py | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/bmaptools/BmapCopy.py b/bmaptools/BmapCopy.py
index 357b45d..5c9e5dc 100644
--- a/bmaptools/BmapCopy.py
+++ b/bmaptools/BmapCopy.py
@@ -59,7 +59,7 @@ from xml.etree import ElementTree
 from bmaptools.BmapHelpers import human_size
 
 # The highest supported bmap format version
-SUPPORTED_BMAP_VERSION = 1
+SUPPORTED_BMAP_VERSION = 2
 
 class Error(Exception):
     """
@@ -318,21 +318,31 @@ class BmapCopy:
                         "blocks count (%d bytes != %d blocks * %d bytes)"
                         % (self.image_size, self.blocks_cnt, self.block_size))
 
-        if self.bmap_version_major >= 1 and self.bmap_version_minor >= 3:
-            # Bmap file checksum appeard in format 1.3 and the only supported
-            # checksum type was SHA1. Version 1.4 started supporting arbitrary
-            # checksum types. A new "ChecksumType" tag was introduce to specify
-            # the checksum function name. And all XML tags which contained
-            # "sha1" in their name were renamed to something more neutral.
-            if self.bmap_version_minor == 3:
-                self._cs_type = "sha1"
-                self._cs_attrib_name = "sha1"
-                self._bmap_cs_attrib_name = "BmapFileSHA1"
-            else:
-                self._cs_type = xml.find("ChecksumType").text.strip()
-                self._cs_attrib_name = "chksum"
-                self._bmap_cs_attrib_name = "BmapFileChecksum"
-
+        if self.bmap_version_major > 1 or \
+           (self.bmap_version_major == 1 and self.bmap_version_minor == 4):
+            # In bmap format version 1.0-1.3 the only supported checksum type
+            # was SHA1. Version 2.0 started supporting arbitrary checksum
+            # types. A new "ChecksumType" tag was introduce to specify the
+            # checksum function name. And all XML tags which contained "sha1"
+            # in their name were renamed to something more neutral. This was an
+            # change incompatible with previous formats.
+            #
+            # There is a special format version 1.4, which should not have been
+            # ever issued, but was released by a mistake. The mistake was that
+            # when implementing version 2.0 support we mistakenly gave it
+            # version number 1.4. This was later on fixed and format version
+            # 1.4 became version 2.0. So 1.4 and 2.0 formats are identical.
+            #
+            # Note, bmap files did not contain checksums prior to version 1.3.
+            self._cs_type = xml.find("ChecksumType").text.strip()
+            self._cs_attrib_name = "chksum"
+            self._bmap_cs_attrib_name = "BmapFileChecksum"
+        elif self.bmap_version_minor == 3:
+            self._cs_type = "sha1"
+            self._cs_attrib_name = "sha1"
+            self._bmap_cs_attrib_name = "BmapFileSHA1"
+
+        if self._cs_type:
             try:
                 self._cs_len = len(hashlib.new(self._cs_type).hexdigest())
             except ValueError as err:
-- 
1.8.1.4




More information about the Bmap-tools mailing list