changeset 180:d799c2be6e81

Make Timestamps values "datetime" instances
author Franz Glasner <hg@dom66.de>
date Tue, 04 Sep 2018 09:37:17 +0200
parents fb754a9bd5e8
children bf58e5718f62
files extensions/timestamps.py
diffstat 1 files changed, 24 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/extensions/timestamps.py	Sat Sep 01 18:28:58 2018 +0200
+++ b/extensions/timestamps.py	Tue Sep 04 09:37:17 2018 +0200
@@ -59,10 +59,11 @@
 __author__ = "Franz Glasner"
 
 
-import os
+import collections
+import datetime
 import io
-import datetime
-import collections
+import os
+import re
 
 from mercurial.i18n import _
 from mercurial import (cmdutil, scmutil, config, util, error, match,
@@ -78,6 +79,8 @@
 TIMESTAMPS_CONFIGFILE = ".hgtimestamps"
 TIMESTAMPS_DATABASE = TIMESTAMPS_CONFIGFILE + ".db"
 
+TIMESTAMP_FORMAT = re.compile(r"^(?P<year>[0-9]{4})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})T(?P<hour>[0-9]{2}):(?P<minute>[0-9]{2}):(?P<second>[0-9]{2})(\.(?P<ms>[0-9]+))?Z$")
+
 
 def getversion():
     """Provide the version information for verbose :hg:`version` output.
@@ -415,8 +418,23 @@
                 if k.startswith("/"):
                     raise ValueError(
                         "invalid absolute path in line %d" % lineno)
-                self._d[k] = v
-                datano += 1
+                mo = TIMESTAMP_FORMAT.search(v)
+                if mo:
+                    dtparts = [mo.group("year"),
+                               mo.group("month"),
+                               mo.group("day"),
+                               mo.group("hour"),
+                               mo.group("minute"),
+                               mo.group("second")]
+                    try:
+                        dtparts.append(mo.group("ms"))
+                    except LookupError:
+                        pass   # no milliseconds
+                    self._d[k] = datetime.datetime(
+                    *[int(d, 10) for d in dtparts])
+                    datano += 1
+                else:
+                    assert False
             elif not record:
                 self._d["/-%d/" % lineno] = None
             elif len(record) == 1:
@@ -483,5 +501,5 @@
                 else:
                     raise ValueError("unknown key type in timestamps: %r" % k)
             else:
-                dbwriter.send((k, v))
+                dbwriter.send((k, v.isoformat() + "Z"))
         dbwriter.close()