diff cutils/treesum.py @ 386:f045d46e9f3d

treesum: also collect the CRC checksum when reading .treesum files and test for them
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 17 May 2025 22:41:22 +0200
parents ea73723be05e
children
line wrap: on
line diff
--- a/cutils/treesum.py	Sat May 17 16:53:16 2025 +0200
+++ b/cutils/treesum.py	Sat May 17 22:41:22 2025 +0200
@@ -1935,7 +1935,7 @@
 
         with reader:
             root = generator = flags = fsencoding = algorithm = digest \
-                = size = None
+                = size = crc_checksum = None
             errors = set()
             comments = []
             fnmatch_filters = []
@@ -1949,7 +1949,8 @@
                     # start a new block
                     in_block = True
                     block_no += 1
-                    root = flags = algorithm = digest = size = None
+                    root = flags = algorithm = digest = size = \
+                        crc_checksum = None
                     comments = []
                 elif record[0] == "GENERATOR":
                     generator = record[1]
@@ -1970,7 +1971,7 @@
                 elif record[0] == "ACCEPT-TREESUM":
                     pass
                 elif record[0] == "CRC32":
-                    pass
+                    crc_checksum = record[1]
                     # in_block = False
                 else:
                     if not in_block:
@@ -1990,7 +1991,8 @@
                                 block_no,
                                 root, generator, fsencoding, flags,
                                 fnmatch_filters,
-                                comments, errors, algorithm, digest, size)
+                                comments, errors, algorithm, digest, size,
+                                crc_checksum)
                             root = generator = flags = fsencoding = algorithm \
                                 = digest = size = None
                             errors = set()
@@ -2002,14 +2004,16 @@
                     block_handler(
                         block_no,
                         root, generator, fsencoding, flags, fnmatch_filters,
-                        comments, errors, algorithm, digest, size)
+                        comments, errors, algorithm, digest, size,
+                        crc_checksum)
             else:
                 logging.warning("missing block end")
 
 
 def print_block_data(block_no, tag, generator, fsencoding, flags,
                      fnmatch_filters, comments, errors,
-                     algorithm, digest, size):
+                     algorithm, digest, size,
+                     crc_checksum):
     digeststr = util.n(binascii.hexlify(digest)) if digest else "<no digest>"
     sizestr = str(size) if size is not None else "<no size>"
     print("BLOCK No %d:" % (block_no,))
@@ -2042,14 +2046,16 @@
 class TreesumInfo(object):
 
     def __init__(self):
-        self._algorithm = self._digest = self._size = None
+        self._algorithm = self._digest = self._size = self._crc_checksum = None
 
     def __call__(self, block_no, tag, generator, fsencoding, flags,
                  fnmatch_filters, comments, errors,
-                 algorithm, digest, size):
+                 algorithm, digest, size,
+                 crc_checksum):
         self._algorithm = algorithm
         self._digest = digest
         self._size = size
+        self._crc_checksum = crc_checksum    # this is the hex-encoded value
 
     @property
     def algorithm(self):
@@ -2063,6 +2069,12 @@
     def size(self):
         return self._size
 
+    @property
+    def crc_checksum(self):
+        if self._crc_checksum:
+            return self._crc_checksum.upper()
+        return self._crc_checksum
+
     @classmethod
     def collect_last_from_file(cls, digest_file):
         info = cls()