Mercurial > hgrepos > Python > apps > py-cutils
comparison cutils/treesum.py @ 128:7c646921a479
Add TIMESTAMP and ISOTIMESTAMP to the output
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 02 Jan 2025 18:23:10 +0100 |
| parents | 6a50d02fe0ca |
| children | bdd8ea43074b |
comparison
equal
deleted
inserted
replaced
| 127:6a50d02fe0ca | 128:7c646921a479 |
|---|---|
| 14 | 14 |
| 15 | 15 |
| 16 import argparse | 16 import argparse |
| 17 import base64 | 17 import base64 |
| 18 import binascii | 18 import binascii |
| 19 import datetime | |
| 19 import os | 20 import os |
| 20 import sys | 21 import sys |
| 22 import time | |
| 21 | 23 |
| 22 from . import (__version__, __revision__) | 24 from . import (__version__, __revision__) |
| 23 from . import util | 25 from . import util |
| 24 from .util import cm | 26 from .util import cm |
| 25 from .util import digest | 27 from .util import digest |
| 135 flags = [] | 137 flags = [] |
| 136 if handle_root_logical: | 138 if handle_root_logical: |
| 137 flags.append(b"logical") | 139 flags.append(b"logical") |
| 138 if flags: | 140 if flags: |
| 139 outfp.write(format_bsd_line("FLAGS", None, b",".join(flags), False)) | 141 outfp.write(format_bsd_line("FLAGS", None, b",".join(flags), False)) |
| 142 | |
| 143 # Write execution timestamps in POSIX epoch and ISO format | |
| 144 ts = time.time() | |
| 145 outfp.write(format_bsd_line("TIMESTAMP", ts, None, False)) | |
| 146 ts = (datetime.datetime.utcfromtimestamp(ts)).isoformat("T") | |
| 147 outfp.write(format_bsd_line("ISOTIMESTAMP", ts, None, False)) | |
| 140 | 148 |
| 141 dir_digests = {} | 149 dir_digests = {} |
| 142 | 150 |
| 143 if not handle_root_logical and os.path.islink(root): | 151 if not handle_root_logical and os.path.islink(root): |
| 144 linktgt = util.fsencode(os.readlink(root)) | 152 linktgt = util.fsencode(os.readlink(root)) |
| 191 algorithm[1], dir_dgst.digest(), opath, use_base64)) | 199 algorithm[1], dir_dgst.digest(), opath, use_base64)) |
| 192 outfp.flush() | 200 outfp.flush() |
| 193 dir_digests[top] = dir_dgst.digest() | 201 dir_digests[top] = dir_dgst.digest() |
| 194 | 202 |
| 195 | 203 |
| 196 def format_bsd_line(digestname, digest, filename, use_base64): | 204 def format_bsd_line(digestname, value, filename, use_base64): |
| 197 ls = os.linesep if isinstance(os.linesep, bytes) \ | 205 ls = os.linesep if isinstance(os.linesep, bytes) \ |
| 198 else os.linesep.encode("utf-8") | 206 else os.linesep.encode("utf-8") |
| 199 if not isinstance(digestname, bytes): | 207 if not isinstance(digestname, bytes): |
| 200 digestname = digestname.encode("ascii") | 208 digestname = digestname.encode("ascii") |
| 209 if digestname == b"TIMESTAMP": | |
| 210 return b"TIMESTAMP = %d%s" % (value, ls) | |
| 211 if digestname == b"ISOTIMESTAMP": | |
| 212 if not isinstance(value, bytes): | |
| 213 value = value.encode("ascii") | |
| 214 return b"ISOTIMESTAMP = %s%s" % (value, ls) | |
| 201 if not isinstance(filename, bytes): | 215 if not isinstance(filename, bytes): |
| 202 filename = util.fsencode(filename) | 216 filename = util.fsencode(filename) |
| 203 if digest is None: | 217 if value is None: |
| 204 return b"%s (%s)%s" % (digestname, filename, ls) | 218 return b"%s (%s)%s" % (digestname, filename, ls) |
| 205 if use_base64: | 219 if use_base64: |
| 206 digest = base64.b64encode(digest) | 220 value = base64.b64encode(value) |
| 207 else: | 221 else: |
| 208 digest = binascii.hexlify(digest) | 222 value = binascii.hexlify(value) |
| 209 if filename != b"/./@": | 223 if filename != b"/./@": |
| 210 filename = util.normalize_filename(filename, True) | 224 filename = util.normalize_filename(filename, True) |
| 211 return b"%s (%s) = %s%s" % (digestname, filename, digest, ls) | 225 return b"%s (%s) = %s%s" % (digestname, filename, value, ls) |
| 212 | 226 |
| 213 | 227 |
| 214 if __name__ == "__main__": | 228 if __name__ == "__main__": |
| 215 sys.exit(main()) | 229 sys.exit(main()) |
