# HG changeset patch # User Franz Glasner # Date 1743171372 -3600 # Node ID 9ee84624587f67b66bd494df0e1234be193fd25a # Parent 61cbae10103c8dc84669700e781137a2f2d24cf8 treesum: move the handling of base64 digest output into the writers completely diff -r 61cbae10103c -r 9ee84624587f cutils/treesum.py --- a/cutils/treesum.py Fri Mar 28 14:20:45 2025 +0100 +++ b/cutils/treesum.py Fri Mar 28 15:16:12 2025 +0100 @@ -539,10 +539,10 @@ raise NotImplementedError("`output_style'") with out_cm as outfp: - writer = writerstyle(outfp) + writer = writerstyle(outfp, use_base64=opts.base64) for d in opts.directories: V1DirectoryTreesumGenerator( - opts.algorithm, opts.mmap, opts.base64, + opts.algorithm, opts.mmap, opts.follow_symlinks, opts.generator, opts.metadata_mode, @@ -558,7 +558,7 @@ class V1DirectoryTreesumGenerator(object): - def __init__(self, algorithm, use_mmap, use_base64, + def __init__(self, algorithm, use_mmap, follow_symlinks, with_generator, with_metadata_mode, with_metadata_full_mode, @@ -568,7 +568,6 @@ super(V1DirectoryTreesumGenerator, self).__init__() self._algorithm = algorithm self._use_mmap = use_mmap - self._use_base64 = use_base64 self._follow_symlinks = follow_symlinks self._with_generator = with_generator self._with_metadata_mode = with_metadata_mode @@ -678,7 +677,6 @@ self._algorithm[1], b"./@/", dir_dgst.digest(), - self._use_base64, size=sz) self._writer.flush() else: @@ -821,7 +819,6 @@ collector.algorithm or "MD5", opath, None, - use_base64=self._use_base64, size=sz) return (errno.ESRCH, None, None, None) # We got all required infos without errors @@ -831,7 +828,7 @@ else: self._writer.write_file_digest( collector.algorithm, opath, collector.digest, - use_base64=self._use_base64, size=sz) + size=sz) return (0, collector.algorithm, collector.digest, @@ -851,7 +848,7 @@ else: self._writer.write_file_digest( self._algorithm[1], opath, None, - use_base64=self._use_base64, size=None) + size=None) return (eno, None, None, None) # # No treesum file: just process normally with digesting @@ -949,7 +946,6 @@ util.interpolate_bytes( b"%s/./@%s", opath, special_tag), linkdgst.digest(), - self._use_base64, size=sz) else: # @@ -990,7 +986,6 @@ util.interpolate_bytes( b"%s/./%s", opath, special_tag), b"", - self._use_base64, size=sz) elif fso.is_dir: assert fso.stat is not None # because .is_dir is True @@ -1031,8 +1026,7 @@ self._writer.write_file_digest( self._algorithm[1], util.interpolate_bytes(b"%s/./@/", opath), - linkdgst.digest(), - self._use_base64) + linkdgst.digest()) else: # # Follow the symlink to dir or handle a "real" directory @@ -1125,7 +1119,6 @@ self._algorithm[1], util.interpolate_bytes(b"%s/./@", opath), linkdgst.digest(), - self._use_base64, size=sz) else: # @@ -1217,7 +1210,6 @@ else None) self._writer.write_file_digest( self._algorithm[1], opath, dgst, - use_base64=self._use_base64, size=sz) self._writer.flush() opath = join_output_path(top, None) @@ -1238,8 +1230,7 @@ else: sz = dir_size if self._print_size else None self._writer.write_file_digest( - self._algorithm[1], opath, dir_dgst.digest(), - use_base64=self._use_base64, size=sz) + self._algorithm[1], opath, dir_dgst.digest(), size=sz) self._writer.flush() return (0, self._algorithm[1], dir_dgst.digest(), dir_size) @@ -1296,8 +1287,9 @@ LS = util.b(os.linesep) - def __init__(self, outfp): + def __init__(self, outfp, use_base64=False): self._outfp = outfp + self.use_base64 = use_base64 self.reset_crc() @property @@ -1336,13 +1328,13 @@ """Writer to write treesum digest files in a format similar to BSD digest files. - Provides high-level methods to write data lines. + Provides high-level methods to write data lines and some very common + attributes that control some aspects of the output format. """ def __init__(self, outfp, **kwds): - # IGNORE **kwds - super(TaggedTreesumWriter, self).__init__(outfp) + super(TaggedTreesumWriter, self).__init__(outfp, **kwds) def start(self, version): """Begin a new block, reset the current CRC and write the VERSION @@ -1419,12 +1411,11 @@ self.write(filename) self.writeln(b")") - def write_file_digest(self, algorithm, filename, digest, - use_base64=False, size=None): + def write_file_digest(self, algorithm, filename, digest, size=None): assert isinstance(filename, bytes) if digest is not None: digest = (base64.b64encode(digest) - if use_base64 + if self.use_base64 else binascii.hexlify(digest)) self.write(util.b(algorithm)) self.write(b" (") @@ -1457,7 +1448,7 @@ """ def __init__(self, outfp, **kwds): - super(TabularTreesumWriter, self).__init__(outfp) + super(TabularTreesumWriter, self).__init__(outfp, **kwds) def start(self, version): """Begin a new block, reset the current CRC and write the VERSION @@ -1525,12 +1516,11 @@ self.write(b"ACCEPT-TREESUM\t") self.writeln(filename) - def write_file_digest(self, algorithm, filename, digest, - use_base64=False, size=None): + def write_file_digest(self, algorithm, filename, digest, size=None): assert isinstance(filename, bytes) if digest is not None: digest = (base64.b64encode(digest) - if use_base64 + if self.use_base64 else binascii.hexlify(digest)) self.write(util.b(algorithm)) self.write(b":")