changeset 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
files cutils/treesum.py
diffstat 1 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/cutils/treesum.py	Thu Jan 02 17:46:50 2025 +0100
+++ b/cutils/treesum.py	Thu Jan 02 18:23:10 2025 +0100
@@ -16,8 +16,10 @@
 import argparse
 import base64
 import binascii
+import datetime
 import os
 import sys
+import time
 
 from . import (__version__, __revision__)
 from . import util
@@ -138,6 +140,12 @@
     if flags:
         outfp.write(format_bsd_line("FLAGS", None, b",".join(flags), False))
 
+    # Write execution timestamps in POSIX epoch and ISO format
+    ts = time.time()
+    outfp.write(format_bsd_line("TIMESTAMP", ts, None, False))
+    ts = (datetime.datetime.utcfromtimestamp(ts)).isoformat("T")
+    outfp.write(format_bsd_line("ISOTIMESTAMP", ts, None, False))
+
     dir_digests = {}
 
     if not handle_root_logical and os.path.islink(root):
@@ -193,22 +201,28 @@
         dir_digests[top] = dir_dgst.digest()
 
 
-def format_bsd_line(digestname, digest, filename, use_base64):
+def format_bsd_line(digestname, value, filename, use_base64):
     ls = os.linesep if isinstance(os.linesep, bytes) \
         else os.linesep.encode("utf-8")
     if not isinstance(digestname, bytes):
         digestname = digestname.encode("ascii")
+    if digestname == b"TIMESTAMP":
+        return b"TIMESTAMP = %d%s" % (value, ls)
+    if digestname == b"ISOTIMESTAMP":
+        if not isinstance(value, bytes):
+            value = value.encode("ascii")
+        return b"ISOTIMESTAMP = %s%s" % (value, ls)
     if not isinstance(filename, bytes):
         filename = util.fsencode(filename)
-    if digest is None:
+    if value is None:
         return b"%s (%s)%s" % (digestname, filename, ls)
     if use_base64:
-        digest = base64.b64encode(digest)
+        value = base64.b64encode(value)
     else:
-        digest = binascii.hexlify(digest)
+        value = binascii.hexlify(value)
     if filename != b"/./@":
         filename = util.normalize_filename(filename, True)
-    return b"%s (%s) = %s%s" % (digestname, filename, digest, ls)
+    return b"%s (%s) = %s%s" % (digestname, filename, value, ls)
 
 
 if __name__ == "__main__":