diff cutils/treesum.py @ 382:dd0bc31064e4

treesum: Replace "DigestSizeCollector" by "TreesumInfo"
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 17 May 2025 13:32:39 +0200
parents ff4424a7a8cf
children ea73723be05e
line wrap: on
line diff
--- a/cutils/treesum.py	Sat May 17 13:25:48 2025 +0200
+++ b/cutils/treesum.py	Sat May 17 13:32:39 2025 +0200
@@ -793,9 +793,10 @@
                 if self._fnmatcher.shall_accept_treesum(fpath):
                     # Yes we have hit a treesum digest file
                     logging.debug("Accepting existing treesum from: %s", fpath)
-                    collector = DigestSizeCollector()
+                    treesum_info = None
                     try:
-                        collector.collect_from_file(os.path.join(root, fpath))
+                        treesum_info = TreesumInfo.collect_last_from_file(
+                            os.path.join(root, fpath))
                     except OSError as e:
                         eno = e.errno
                         emsg = e.strerror
@@ -818,7 +819,7 @@
                         # (digest, size).
                         #
                         if self._size_only:
-                            if collector.size is None:
+                            if treesum_info.size is None:
                                 #
                                 # This is a severe error here: just the size
                                 # is required, but we have not got one.
@@ -832,7 +833,7 @@
                                 return (errno.ESRCH, None, None, None)
                         else:
                             if self._print_size:
-                                if collector.size is None:
+                                if treesum_info.size is None:
                                     #
                                     # XXX FIXME: Is this a **severe** error
                                     #            here? Currently: no
@@ -843,10 +844,10 @@
                                             fso.npath, self._utf8_mode))
                                     sz = -1
                                 else:
-                                    sz = collector.size
+                                    sz = treesum_info.size
                             else:
                                 sz = None
-                            if collector.digest is None:
+                            if treesum_info.digest is None:
                                 #
                                 # This is really a severe error. Most probably
                                 # the treesum file was created with
@@ -858,7 +859,7 @@
                                     walk.WalkDirEntry.alt_bytes(
                                         fso.npath, self._utf8_mode))
                                 self._writer.write_file_digest(
-                                    collector.algorithm or "MD5",
+                                    treesum_info.algorithm or "MD5",
                                     opath,
                                     None,
                                     sz)
@@ -866,15 +867,17 @@
                         # We got all required infos without errors
                         self._writer.write_accept_treesum_file(fpath)
                         if self._size_only:
-                            self._writer.write_size(opath, collector.size)
+                            self._writer.write_size(opath, treesum_info.size)
                         else:
                             self._writer.write_file_digest(
-                                collector.algorithm, opath, collector.digest,
+                                treesum_info.algorithm,
+                                opath,
+                                treesum_info.digest,
                                 sz)
                         return (0,
-                                collector.algorithm,
-                                collector.digest,
-                                collector.size)
+                                treesum_info.algorithm,
+                                treesum_info.digest,
+                                treesum_info.size)
                     else:
                         #
                         # treesum file could not be read
@@ -2036,34 +2039,6 @@
         print("    Errors: <none>")
 
 
-class DigestSizeCollector(object):
-
-    def __init__(self):
-        self._algorithm = self._digest = self._size = None
-
-    def __call__(self, block_no, tag, generator, fsencoding, flags,
-                 fnmatch_filters, comments, errors,
-                 algorithm, digest, size):
-        self._algorithm = algorithm
-        self._digest = digest
-        self._size = size
-
-    @property
-    def algorithm(self):
-        return self._algorithm
-
-    @property
-    def digest(self):
-        return self._digest
-
-    @property
-    def size(self):
-        return self._size
-
-    def collect_from_file(self, digest_file):
-        get_infos_from_digestfile([digest_file], self, True)
-
-
 class TreesumInfo(object):
 
     def __init__(self):