From 71bac48e03d07f61ac7a8cc42d0eda29c9a740b8 Mon Sep 17 00:00:00 2001 From: Dmitry Shachnev Date: Thu, 9 Jul 2015 13:03:49 +0300 Subject: [PATCH] Add support for SOURCE_DATE_EPOCH environment variable to ustrftime function See https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal. --- sphinx/util/osutil.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 20c6a90cc..5bfbcabc4 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -151,15 +151,23 @@ no_fn_re = re.compile(r'[^a-zA-Z0-9_-]') def make_filename(string): return no_fn_re.sub('', string) or 'sphinx' -if PY2: + +def ustrftime(format, *args): # strftime for unicode strings - def ustrftime(format, *args): + if not args: + # If time is not specified, try to use $SOURCE_DATE_EPOCH variable + # See https://wiki.debian.org/ReproducibleBuilds/TimestampsProposal + source_date_epoch = os.getenv('SOURCE_DATE_EPOCH') + if source_date_epoch is not None: + time_struct = time.gmtime(float(source_date_epoch)) + args = [time_struct] + if PY2: # if a locale is set, the time strings are encoded in the encoding # given by LC_TIME; if that is available, use it enc = locale.getlocale(locale.LC_TIME)[1] or 'utf-8' return time.strftime(text_type(format).encode(enc), *args).decode(enc) -else: - ustrftime = time.strftime + else: + return time.strftime(format, *args) def safe_relpath(path, start=None):