# HG changeset patch # User Franz Glasner # Date 1536046637 -7200 # Node ID d799c2be6e8162a0f5dbd32dc63c26cb2c56dc16 # Parent fb754a9bd5e857c7bbb2ebb24866ddbf89f0e474 Make Timestamps values "datetime" instances diff -r fb754a9bd5e8 -r d799c2be6e81 extensions/timestamps.py --- 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[0-9]{4})-(?P[0-9]{2})-(?P[0-9]{2})T(?P[0-9]{2}):(?P[0-9]{2}):(?P[0-9]{2})(\.(?P[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()