blob: f704ae63a7841b98bdaf16e30a5e5b363c1ecb3f [file] [edit]
From 08f5d27308092c951e08729552fe21f762f6c153 Mon Sep 17 00:00:00 2001
From: Jack Rosenthal <jrosenth@chromium.org>
Date: Fri, 13 Oct 2023 10:41:35 -0600
Subject: [PATCH] [CrOS] Default hash-based invalidation mode
Timestamp invalidation mode results in non-reproducible builds.
Default to hash-based invalidation mode, and yell at those who try to
do otherwise.
BUG=b:305052110
---
Lib/py_compile.py | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/Lib/py_compile.py b/Lib/py_compile.py
index a81f493731..feb1362edb 100644
--- a/Lib/py_compile.py
+++ b/Lib/py_compile.py
@@ -70,10 +70,7 @@ class PycInvalidationMode(enum.Enum):
def _get_default_invalidation_mode():
- if os.environ.get('SOURCE_DATE_EPOCH'):
- return PycInvalidationMode.CHECKED_HASH
- else:
- return PycInvalidationMode.TIMESTAMP
+ return PycInvalidationMode.CHECKED_HASH
def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1,
@@ -123,6 +120,11 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1,
"""
if invalidation_mode is None:
invalidation_mode = _get_default_invalidation_mode()
+ if invalidation_mode == PycInvalidationMode.TIMESTAMP:
+ raise ValueError(
+ "Do not use TIMESTAMP invalidation mode for CrOS: it results in "
+ "non-reproducible builds."
+ )
if cfile is None:
if optimize >= 0:
optimization = optimize if optimize >= 1 else ''
--
2.42.0.655.g421f12c284-goog