mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
bpo-34022: Stop forcing of hash-based invalidation with SOURCE_DATE_EPOCH (GH-9607)
Unconditional forcing of ``CHECKED_HASH`` invalidation was introduced in 3.7.0 in bpo-29708. The change is bad, as it unconditionally overrides *invalidation_mode*, even if it was passed as an explicit argument to ``py_compile.compile()`` or ``compileall``. An environment variable should *never* override an explicit argument to a library function. That change leads to multiple test failures if the ``SOURCE_DATE_EPOCH`` environment variable is set. This changes ``py_compile.compile()`` to only look at ``SOURCE_DATE_EPOCH`` if no explicit *invalidation_mode* was specified. I also made various relevant tests run with explicit control over the value of ``SOURCE_DATE_EPOCH``. While looking at this, I noticed that ``zipimport`` does not work with hash-based .pycs _at all_, though I left the fixes for subsequent commits.
This commit is contained in:
parent
7e18deef65
commit
a6b3ec5b6d
8 changed files with 161 additions and 30 deletions
|
@ -69,8 +69,15 @@ class PycInvalidationMode(enum.Enum):
|
|||
UNCHECKED_HASH = 3
|
||||
|
||||
|
||||
def _get_default_invalidation_mode():
|
||||
if os.environ.get('SOURCE_DATE_EPOCH'):
|
||||
return PycInvalidationMode.CHECKED_HASH
|
||||
else:
|
||||
return PycInvalidationMode.TIMESTAMP
|
||||
|
||||
|
||||
def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1,
|
||||
invalidation_mode=PycInvalidationMode.TIMESTAMP):
|
||||
invalidation_mode=None):
|
||||
"""Byte-compile one Python source file to Python bytecode.
|
||||
|
||||
:param file: The source file name.
|
||||
|
@ -112,8 +119,8 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1,
|
|||
the resulting file would be regular and thus not the same type of file as
|
||||
it was previously.
|
||||
"""
|
||||
if os.environ.get('SOURCE_DATE_EPOCH'):
|
||||
invalidation_mode = PycInvalidationMode.CHECKED_HASH
|
||||
if invalidation_mode is None:
|
||||
invalidation_mode = _get_default_invalidation_mode()
|
||||
if cfile is None:
|
||||
if optimize >= 0:
|
||||
optimization = optimize if optimize >= 1 else ''
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue