1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| | From 3cc41c05fad5601c0dd1832f64a6e9efca017727 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Mon, 1 Apr 2019 11:36:04 -0400
Subject: [PATCH] robottime: Honor the SOURCE_DATE_EPOCH environment variable.
Honoring the SOURCE_DATE_EPOCH environment variable allows building
the documentation using libdoc reproducibly, by setting the generated
timestamp to a fixed value.
For more background on reproducible builds and the SOURCE_DATE_EPOCH
environment variable, see:
https://reproducible-builds.org/specs/source-date-epoch/.
* src/robot/utils/robottime.py: import `os'.
(TimestampCache._get_epoch): Retrieve date from SOURCE_DATE_EPOCH if
it is defined, otherwise from time.time().
* utest/output/test_logger.py (TestLogger.test_write_to_one_logger):
Check for the existance of a timestamp attribute instead of checking
for its content as the later is easy to break when using the
SOURCE_DATE_EPOCH environment variable.
---
src/robot/utils/robottime.py | 3 +++
utest/output/test_logger.py | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/robot/utils/robottime.py b/src/robot/utils/robottime.py
index 06432a4a6..91526f826 100644
--- a/src/robot/utils/robottime.py
+++ b/src/robot/utils/robottime.py
@@ -14,6 +14,7 @@
# limitations under the License.
import datetime
+import os
import time
import re
@@ -395,6 +396,8 @@ class TimestampCache(object):
# Seam for mocking
def _get_epoch(self):
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ return float(os.getenv('SOURCE_DATE_EPOCH'))
return time.time()
def _use_cache(self, secs, *separators):
diff --git a/utest/output/test_logger.py b/utest/output/test_logger.py
index 92fe6d77d..e980227aa 100644
--- a/utest/output/test_logger.py
+++ b/utest/output/test_logger.py
@@ -46,7 +46,7 @@ class TestLogger(unittest.TestCase):
logger = LoggerMock(('Hello, world!', 'INFO'))
self.logger.register_logger(logger)
self.logger.write('Hello, world!', 'INFO')
- assert_true(logger.msg.timestamp.startswith('20'))
+ assert_true(hasattr(logger.msg, 'timestamp'))
def test_write_to_one_logger_with_trace_level(self):
logger = LoggerMock(('expected message', 'TRACE'))
--
2.20.1
|