Here is a version of the patch that works with the upstream Python, but
that I cannot get to work with our Guix recipe.
Could you test it and tell me what you think? I intend to push this to
CPython.
Cyril.
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index c4ee41a..d9885c9 100644
--- Lib/importlib/_bootstrap.py
+++ Lib/importlib/_bootstrap.py
@@ -1443,7 +1443,8 @@ class SourceLoader(_LoaderBasics):
Implementing this method allows the loader to read bytecode files.
Raises IOError when the path cannot be handled.
"""
- return {'mtime': self.path_mtime(path)}
+ return {'mtime': float(_os.environ.get(b'SOURCE_DATE_EPOCH',
+ st.st_mtime))}
def _cache_bytecode(self, source_path, cache_path, data):
"""Optional method which writes data (bytes) to a file path (a str).
@@ -1580,7 +1581,10 @@ class SourceFileLoader(FileLoader, SourceLoader):
def path_stats(self, path):
"""Return the metadata for the path."""
st = _path_stat(path)
- return {'mtime': st.st_mtime, 'size': st.st_size}
+ return {
+ 'mtime': float(_os.environ.get(b'SOURCE_DATE_EPOCH', st.st_mtime)),
+ 'size': st.st_size
+ }
def _cache_bytecode(self, source_path, bytecode_path, data):
# Adapt between the two APIs