summaryrefslogtreecommitdiffstats
path: root/Doc/library
diff options
context:
space:
mode:
authorElvis Pranskevichus <elvis@magic.io>2018-10-10 16:43:14 (GMT)
committerVictor Stinner <vstinner@redhat.com>2018-10-10 16:43:14 (GMT)
commita6b3ec5b6d4f6387820fccc570eea08b9615620d (patch)
tree0a4cda67f41ce3e6237f4614c890e73d666e69b5 /Doc/library
parent7e18deef652a9d413d5dbd19d61073ba7eb5460e (diff)
downloadcpython-a6b3ec5b6d4f6387820fccc570eea08b9615620d.zip
cpython-a6b3ec5b6d4f6387820fccc570eea08b9615620d.tar.gz
cpython-a6b3ec5b6d4f6387820fccc570eea08b9615620d.tar.bz2
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.
Diffstat (limited to 'Doc/library')
-rw-r--r--Doc/library/compileall.rst11
-rw-r--r--Doc/library/py_compile.rst13
2 files changed, 16 insertions, 8 deletions
diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst
index 22d1c6b..2d6c52b 100644
--- a/Doc/library/compileall.rst
+++ b/Doc/library/compileall.rst
@@ -85,13 +85,16 @@ compile Python sources.
.. cmdoption:: --invalidation-mode [timestamp|checked-hash|unchecked-hash]
- Control how the generated pycs will be invalidated at runtime. The default
- setting, ``timestamp``, means that ``.pyc`` files with the source timestamp
+ Control how the generated byte-code files are invalidated at runtime.
+ The ``timestamp`` value, means that ``.pyc`` files with the source timestamp
and size embedded will be generated. The ``checked-hash`` and
``unchecked-hash`` values cause hash-based pycs to be generated. Hash-based
pycs embed a hash of the source file contents rather than a timestamp. See
- :ref:`pyc-invalidation` for more information on how Python validates bytecode
- cache files at runtime.
+ :ref:`pyc-invalidation` for more information on how Python validates
+ bytecode cache files at runtime.
+ The default is ``timestamp`` if the :envvar:`SOURCE_DATE_EPOCH` environment
+ variable is not set, and ``checked-hash`` if the ``SOURCE_DATE_EPOCH``
+ environment variable is set.
.. versionchanged:: 3.2
Added the ``-i``, ``-b`` and ``-h`` options.
diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst
index d720e01..8cb5a4d 100644
--- a/Doc/library/py_compile.rst
+++ b/Doc/library/py_compile.rst
@@ -54,10 +54,10 @@ byte-code cache files in the directory containing the source code.
level of the current interpreter.
*invalidation_mode* should be a member of the :class:`PycInvalidationMode`
- enum and controls how the generated ``.pyc`` files are invalidated at
- runtime. If the :envvar:`SOURCE_DATE_EPOCH` environment variable is set,
- *invalidation_mode* will be forced to
- :attr:`PycInvalidationMode.CHECKED_HASH`.
+ enum and controls how the generated bytecode cache is invalidated at
+ runtime. The default is :attr:`PycInvalidationMode.CHECKED_HASH` if
+ the :envvar:`SOURCE_DATE_EPOCH` environment variable is set, otherwise
+ the default is :attr:`PycInvalidationMode.TIMESTAMP`.
.. versionchanged:: 3.2
Changed default value of *cfile* to be :PEP:`3147`-compliant. Previous
@@ -77,6 +77,11 @@ byte-code cache files in the directory containing the source code.
*invalidation_mode* will be forced to
:attr:`PycInvalidationMode.CHECKED_HASH`.
+ .. versionchanged:: 3.7.2
+ The :envvar:`SOURCE_DATE_EPOCH` environment variable no longer
+ overrides the value of the *invalidation_mode* argument, and determines
+ its default value instead.
+
.. class:: PycInvalidationMode