Mercurial > hgrepos > Python > apps > py-cutils
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 337:e89eb63fc319 | 338:e163e6754071 |
|---|---|
| 693 util.interpolate_bytes( | 693 util.interpolate_bytes( |
| 694 b"%d:%s,%d:%s,", | 694 b"%d:%s,%d:%s,", |
| 695 len(self._algorithm[1]), util.b(self._algorithm[1]), | 695 len(self._algorithm[1]), util.b(self._algorithm[1]), |
| 696 len(linkdgst.digest()), linkdgst.digest())) | 696 len(linkdgst.digest()), linkdgst.digest())) |
| 697 if self._size_only: | 697 if self._size_only: |
| 698 self._writer.write_size(b"./@/", "") | 698 self._writer.write_size(b"./@/", -1) |
| 699 else: | 699 else: |
| 700 sz = "" if self._print_size else None | 700 sz = -1 if self._print_size else None |
| 701 self._writer.write_file_digest( | 701 self._writer.write_file_digest( |
| 702 self._algorithm[1], | 702 self._algorithm[1], |
| 703 b"./@/", | 703 b"./@/", |
| 704 dir_dgst.digest(), | 704 dir_dgst.digest(), |
| 705 sz) | 705 sz) |
| 822 self._writer.write_error(util.b( | 822 self._writer.write_error(util.b( |
| 823 util.interpolate_bytes( | 823 util.interpolate_bytes( |
| 824 b"No size in treesum-file `%s'", | 824 b"No size in treesum-file `%s'", |
| 825 fpath), | 825 fpath), |
| 826 "utf-8")) | 826 "utf-8")) |
| 827 sz = "" | 827 sz = -1 |
| 828 else: | 828 else: |
| 829 sz = collector.size | 829 sz = collector.size |
| 830 else: | 830 else: |
| 831 sz = None | 831 sz = None |
| 832 if collector.digest is None: | 832 if collector.digest is None: |
| 961 # | 961 # |
| 962 if self._size_only: | 962 if self._size_only: |
| 963 self._writer.write_size( | 963 self._writer.write_size( |
| 964 util.interpolate_bytes( | 964 util.interpolate_bytes( |
| 965 b"%s/./@%s", opath, special_tag), | 965 b"%s/./@%s", opath, special_tag), |
| 966 "") | 966 -1) |
| 967 else: | 967 else: |
| 968 sz = "" if self._print_size else None | 968 sz = -1 if self._print_size else None |
| 969 self._writer.write_file_digest( | 969 self._writer.write_file_digest( |
| 970 self._algorithm[1], | 970 self._algorithm[1], |
| 971 util.interpolate_bytes( | 971 util.interpolate_bytes( |
| 972 b"%s/./@%s", opath, special_tag), | 972 b"%s/./@%s", opath, special_tag), |
| 973 linkdgst.digest(), | 973 linkdgst.digest(), |
| 1001 b"4:mode,%d:%s,", len(modestr), modestr)) | 1001 b"4:mode,%d:%s,", len(modestr), modestr)) |
| 1002 if self._size_only: | 1002 if self._size_only: |
| 1003 self._writer.write_size( | 1003 self._writer.write_size( |
| 1004 util.interpolate_bytes( | 1004 util.interpolate_bytes( |
| 1005 b"%s/./%s", opath, special_tag), | 1005 b"%s/./%s", opath, special_tag), |
| 1006 "") | 1006 -1) |
| 1007 else: | 1007 else: |
| 1008 sz = "" if self._print_size else None | 1008 sz = -1 if self._print_size else None |
| 1009 self._writer.write_file_digest( | 1009 self._writer.write_file_digest( |
| 1010 self._algorithm[1], | 1010 self._algorithm[1], |
| 1011 util.interpolate_bytes( | 1011 util.interpolate_bytes( |
| 1012 b"%s/./%s", opath, special_tag), | 1012 b"%s/./%s", opath, special_tag), |
| 1013 b"", | 1013 b"", |
| 1043 len(self._algorithm[1]), util.b(self._algorithm[1]), | 1043 len(self._algorithm[1]), util.b(self._algorithm[1]), |
| 1044 len(linkdgst.digest()), linkdgst.digest())) | 1044 len(linkdgst.digest()), linkdgst.digest())) |
| 1045 if self._size_only: | 1045 if self._size_only: |
| 1046 self._writer.write_size( | 1046 self._writer.write_size( |
| 1047 util.interpolate_bytes(b"%s/./@/", opath), | 1047 util.interpolate_bytes(b"%s/./@/", opath), |
| 1048 "") | 1048 -1) |
| 1049 else: | 1049 else: |
| 1050 sz = "" if self._print_size else None | 1050 sz = -1 if self._print_size else None |
| 1051 self._writer.write_file_digest( | 1051 self._writer.write_file_digest( |
| 1052 self._algorithm[1], | 1052 self._algorithm[1], |
| 1053 util.interpolate_bytes(b"%s/./@/", opath), | 1053 util.interpolate_bytes(b"%s/./@/", opath), |
| 1054 linkdgst.digest(), | 1054 linkdgst.digest(), |
| 1055 sz) | 1055 sz) |
| 1136 len(self._algorithm[1]), util.b(self._algorithm[1]), | 1136 len(self._algorithm[1]), util.b(self._algorithm[1]), |
| 1137 len(linkdgst.digest()), linkdgst.digest())) | 1137 len(linkdgst.digest()), linkdgst.digest())) |
| 1138 if self._size_only: | 1138 if self._size_only: |
| 1139 self._writer.write_size( | 1139 self._writer.write_size( |
| 1140 util.interpolate_bytes(b"%s/./@", opath), | 1140 util.interpolate_bytes(b"%s/./@", opath), |
| 1141 "") | 1141 -1) |
| 1142 else: | 1142 else: |
| 1143 sz = "" if self._print_size else None | 1143 sz = -1 if self._print_size else None |
| 1144 self._writer.write_file_digest( | 1144 self._writer.write_file_digest( |
| 1145 self._algorithm[1], | 1145 self._algorithm[1], |
| 1146 util.interpolate_bytes(b"%s/./@", opath), | 1146 util.interpolate_bytes(b"%s/./@", opath), |
| 1147 linkdgst.digest(), | 1147 linkdgst.digest(), |
| 1148 sz) | 1148 sz) |
| 1339 """ | 1339 """ |
| 1340 | 1340 |
| 1341 If `sz` is `None` then this is signals an error because a size is | 1341 If `sz` is `None` then this is signals an error because a size is |
| 1342 required. | 1342 required. |
| 1343 | 1343 |
| 1344 If the size should not be printed on purpose the `size` should be | |
| 1345 as negative number. | |
| 1346 | |
| 1344 """ | 1347 """ |
| 1345 raise NotImplementedError("write_size") | 1348 raise NotImplementedError("write_size") |
| 1346 | 1349 |
| 1347 def write_file_digest(self, algorithm, filename, digest, size): | 1350 def write_file_digest(self, algorithm, filename, digest, size): |
| 1348 """ | 1351 """ |
| 1349 | 1352 |
| 1350 If `size` is `None` and the output of a size is required then this | 1353 If `size` is `None` and the output of a size is required then this |
| 1351 is an error signal. | 1354 is an error signal. |
| 1355 | |
| 1356 If the size should not be printed on purpose the `size` should be | |
| 1357 as negative number. | |
| 1358 | |
| 1359 If `digest` is `None` is an error signal. | |
| 1352 | 1360 |
| 1353 """ | 1361 """ |
| 1354 raise NotImplementedError("write_file_digest") | 1362 raise NotImplementedError("write_file_digest") |
| 1355 | 1363 |
| 1356 @property | 1364 @property |
| 1465 self.write(b"SIZE (") | 1473 self.write(b"SIZE (") |
| 1466 self.write(filename) | 1474 self.write(filename) |
| 1467 self.write(b")") | 1475 self.write(b")") |
| 1468 if sz is not None: | 1476 if sz is not None: |
| 1469 self.write(b" = ") | 1477 self.write(b" = ") |
| 1470 self.write(util.b(str(sz))) | 1478 self.write(b"" if sz < 0 else util.b(str(sz))) |
| 1471 self.writeln(b"") | 1479 self.writeln(b"") |
| 1472 | 1480 |
| 1473 def write_accept_treesum_file(self, filename): | 1481 def write_accept_treesum_file(self, filename): |
| 1474 assert isinstance(filename, bytes) | 1482 assert isinstance(filename, bytes) |
| 1475 self.write(b"ACCEPT-TREESUM (") | 1483 self.write(b"ACCEPT-TREESUM (") |
| 1490 self.write(b" = ") | 1498 self.write(b" = ") |
| 1491 if digest is not None: | 1499 if digest is not None: |
| 1492 self.write(digest) | 1500 self.write(digest) |
| 1493 if size is not None: | 1501 if size is not None: |
| 1494 self.write(b",") | 1502 self.write(b",") |
| 1495 self.write(util.b(str(size))) | 1503 self.write(b"" if size < 0 else util.b(str(size))) |
| 1496 self.writeln(b"") | 1504 self.writeln(b"") |
| 1497 | 1505 |
| 1498 def finish(self): | 1506 def finish(self): |
| 1499 """Finish a block and write the current CRC""" | 1507 """Finish a block and write the current CRC""" |
| 1500 crc = self.crc.hexdigest() | 1508 crc = self.crc.hexdigest() |
| 1573 self.writeln(root) | 1581 self.writeln(root) |
| 1574 | 1582 |
| 1575 def write_size(self, filename, sz): | 1583 def write_size(self, filename, sz): |
| 1576 assert isinstance(filename, bytes) | 1584 assert isinstance(filename, bytes) |
| 1577 if sz is not None: | 1585 if sz is not None: |
| 1578 self.write(util.b(str(sz))) | 1586 if sz >= 0: |
| 1587 self.write(util.b(str(sz))) | |
| 1588 else: | |
| 1589 self.write(b"?????") | |
| 1579 self.write(b"\t") | 1590 self.write(b"\t") |
| 1580 self.writeln(filename) | 1591 self.writeln(filename) |
| 1581 | 1592 |
| 1582 def write_accept_treesum_file(self, filename): | 1593 def write_accept_treesum_file(self, filename): |
| 1583 assert isinstance(filename, bytes) | 1594 assert isinstance(filename, bytes) |
| 1592 else binascii.hexlify(digest)) | 1603 else binascii.hexlify(digest)) |
| 1593 self.write(util.b(algorithm)) | 1604 self.write(util.b(algorithm)) |
| 1594 self.write(b":") | 1605 self.write(b":") |
| 1595 if digest is not None: | 1606 if digest is not None: |
| 1596 self.write(digest) | 1607 self.write(digest) |
| 1608 else: | |
| 1609 self.write(b"?????") | |
| 1597 self.write(b"\t") | 1610 self.write(b"\t") |
| 1598 if size is not None: | 1611 if size is not None: |
| 1599 self.write(util.b(str(size))) | 1612 if size >= 0: |
| 1613 self.write(util.b(str(size))) | |
| 1614 else: | |
| 1615 self.write(b"?????") | |
| 1600 self.write(b"\t") | 1616 self.write(b"\t") |
| 1601 self.writeln(filename) | 1617 self.writeln(filename) |
| 1602 | 1618 |
| 1603 def finish(self): | 1619 def finish(self): |
| 1604 """Finish a block and write the current CRC""" | 1620 """Finish a block and write the current CRC""" |
