diff cutils/treesum.py @ 338:e163e6754071

treesum: when printing an empty size on purpose do not provide an empty octet string but use -1 as size argument
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 31 Mar 2025 14:09:56 +0200
parents e89eb63fc319
children 9c7a03199092
line wrap: on
line diff
--- a/cutils/treesum.py	Mon Mar 31 13:38:57 2025 +0200
+++ b/cutils/treesum.py	Mon Mar 31 14:09:56 2025 +0200
@@ -695,9 +695,9 @@
                     len(self._algorithm[1]), util.b(self._algorithm[1]),
                     len(linkdgst.digest()), linkdgst.digest()))
             if self._size_only:
-                self._writer.write_size(b"./@/", "")
+                self._writer.write_size(b"./@/", -1)
             else:
-                sz = "" if self._print_size else None
+                sz = -1 if self._print_size else None
                 self._writer.write_file_digest(
                     self._algorithm[1],
                     b"./@/",
@@ -824,7 +824,7 @@
                                             b"No size in treesum-file `%s'",
                                             fpath),
                                         "utf-8"))
-                                    sz = ""
+                                    sz = -1
                                 else:
                                     sz = collector.size
                             else:
@@ -963,9 +963,9 @@
                         self._writer.write_size(
                             util.interpolate_bytes(
                                 b"%s/./@%s", opath, special_tag),
-                            "")
+                            -1)
                     else:
-                        sz = "" if self._print_size else None
+                        sz = -1 if self._print_size else None
                         self._writer.write_file_digest(
                             self._algorithm[1],
                             util.interpolate_bytes(
@@ -1003,9 +1003,9 @@
                         self._writer.write_size(
                             util.interpolate_bytes(
                                 b"%s/./%s", opath, special_tag),
-                            "")
+                            -1)
                     else:
-                        sz = "" if self._print_size else None
+                        sz = -1 if self._print_size else None
                         self._writer.write_file_digest(
                             self._algorithm[1],
                             util.interpolate_bytes(
@@ -1045,9 +1045,9 @@
                     if self._size_only:
                         self._writer.write_size(
                             util.interpolate_bytes(b"%s/./@/", opath),
-                            "")
+                            -1)
                     else:
-                        sz = "" if self._print_size else None
+                        sz = -1 if self._print_size else None
                         self._writer.write_file_digest(
                             self._algorithm[1],
                             util.interpolate_bytes(b"%s/./@/", opath),
@@ -1138,9 +1138,9 @@
                     if self._size_only:
                         self._writer.write_size(
                             util.interpolate_bytes(b"%s/./@", opath),
-                            "")
+                            -1)
                     else:
-                        sz = "" if self._print_size else None
+                        sz = -1 if self._print_size else None
                         self._writer.write_file_digest(
                             self._algorithm[1],
                             util.interpolate_bytes(b"%s/./@", opath),
@@ -1341,6 +1341,9 @@
         If `sz` is `None` then this is signals an error because a size is
         required.
 
+        If the size should not be printed on purpose the `size` should be
+        as negative number.
+
         """
         raise NotImplementedError("write_size")
 
@@ -1350,6 +1353,11 @@
         If `size` is `None` and the output of a size is required then this
         is an error signal.
 
+        If the size should not be printed on purpose the `size` should be
+        as negative number.
+
+        If `digest` is `None` is an error signal.
+
         """
         raise NotImplementedError("write_file_digest")
 
@@ -1467,7 +1475,7 @@
         self.write(b")")
         if sz is not None:
             self.write(b" = ")
-            self.write(util.b(str(sz)))
+            self.write(b"" if sz < 0 else util.b(str(sz)))
         self.writeln(b"")
 
     def write_accept_treesum_file(self, filename):
@@ -1492,7 +1500,7 @@
                 self.write(digest)
             if size is not None:
                 self.write(b",")
-                self.write(util.b(str(size)))
+                self.write(b"" if size < 0 else util.b(str(size)))
         self.writeln(b"")
 
     def finish(self):
@@ -1575,7 +1583,10 @@
     def write_size(self, filename, sz):
         assert isinstance(filename, bytes)
         if sz is not None:
-            self.write(util.b(str(sz)))
+            if sz >= 0:
+                self.write(util.b(str(sz)))
+            else:
+                self.write(b"?????")
         self.write(b"\t")
         self.writeln(filename)
 
@@ -1594,9 +1605,14 @@
         self.write(b":")
         if digest is not None:
             self.write(digest)
+        else:
+            self.write(b"?????")
         self.write(b"\t")
         if size is not None:
-            self.write(util.b(str(size)))
+            if size >= 0:
+                self.write(util.b(str(size)))
+            else:
+                self.write(b"?????")
             self.write(b"\t")
         self.writeln(filename)