From b49696cee10e340f0a58da334e83fe83fe4e7ab0 Mon Sep 17 00:00:00 2001 From: Miro HronĨok Date: Aug 23 2018 13:19:13 +0000 Subject: Renew check-pyc-timestamps.py - rename it, the are no pyo files on Python 3 - make sure to check all levels of pyc files optimization - use path globs - use comprehensions instead of map + filter - use f-strings and print() instead of sys.stderr.write() --- diff --git a/check-pyc-and-pyo-timestamps.py b/check-pyc-and-pyo-timestamps.py deleted file mode 100644 index ab75c9f..0000000 --- a/check-pyc-and-pyo-timestamps.py +++ /dev/null @@ -1,66 +0,0 @@ -"""Checks if all *.pyc and *.pyo files have later mtime than their *.py files.""" - -import importlib.util -import os -import sys - -# list of test and other files that we expect not to have bytecode -not_compiled = [ - '/usr/bin/pathfix.py', - '/usr/bin/pygettext3.py', - f'/usr/bin/pygettext{sys.version[:3]}.py', - '/usr/bin/msgfmt3.py', - f'/usr/bin/msgfmt{sys.version[:3]}.py', - 'test/bad_coding.py', - 'test/bad_coding2.py', - 'test/badsyntax_3131.py', - 'test/badsyntax_future3.py', - 'test/badsyntax_future4.py', - 'test/badsyntax_future5.py', - 'test/badsyntax_future6.py', - 'test/badsyntax_future7.py', - 'test/badsyntax_future8.py', - 'test/badsyntax_future9.py', - 'test/badsyntax_future10.py', - 'test/badsyntax_async1.py', - 'test/badsyntax_async2.py', - 'test/badsyntax_async3.py', - 'test/badsyntax_async4.py', - 'test/badsyntax_async5.py', - 'test/badsyntax_async6.py', - 'test/badsyntax_async7.py', - 'test/badsyntax_async8.py', - 'test/badsyntax_async9.py', - 'test/badsyntax_pep3120.py', - 'lib2to3/tests/data/bom.py', - 'lib2to3/tests/data/crlf.py', - 'lib2to3/tests/data/different_encoding.py', - 'lib2to3/tests/data/false_encoding.py', - 'lib2to3/tests/data/py2_test_grammar.py', - '.debug-gdb.py', -] -failed = 0 - - -def bytecode_expected(source): - for f in not_compiled: - if source.endswith(f): - return False - return True - - -compiled = filter(lambda f: bytecode_expected(f), sys.argv[1:]) -for f in compiled: - # check both pyo and pyc - to_check = map(lambda b: importlib.util.cache_from_source(f, b), (True, False)) - f_mtime = os.path.getmtime(f) - for c in to_check: - c_mtime = os.path.getmtime(c) - if c_mtime < f_mtime: - sys.stderr.write('Failed bytecompilation timestamps check: ') - sys.stderr.write('Bytecode file {} is older than source file {}.\n'.format(c, f)) - failed += 1 - -if failed: - sys.stderr.write('\n{} files failed bytecompilation timestamps check.\n'.format(failed)) - sys.exit(1) diff --git a/check-pyc-timestamps.py b/check-pyc-timestamps.py new file mode 100644 index 0000000..91af4fd --- /dev/null +++ b/check-pyc-timestamps.py @@ -0,0 +1,55 @@ +"""Checks if all *.pyc files have later mtime than their *.py files.""" + +import os +import sys +from importlib.util import cache_from_source +from pathlib import Path + + +RPM_BUILD_ROOT = os.environ.get('RPM_BUILD_ROOT', '') + +# ...cpython-3X.pyc +# ...cpython-3X.opt-1.pyc +# ...cpython-3X.opt-2.pyc +LEVELS = (None, 1, 2) + +# list of globs of test and other files that we expect not to have bytecode +not_compiled = [ + '/usr/bin/*', + '*/test/bad_coding.py', + '*/test/bad_coding2.py', + '*/test/badsyntax_*.py', + '*/lib2to3/tests/data/bom.py', + '*/lib2to3/tests/data/crlf.py', + '*/lib2to3/tests/data/different_encoding.py', + '*/lib2to3/tests/data/false_encoding.py', + '*/lib2to3/tests/data/py2_test_grammar.py', + '*.debug-gdb.py', +] + + +def bytecode_expected(path): + path = Path(path[len(RPM_BUILD_ROOT):]) + for glob in not_compiled: + if path.match(glob): + return False + return True + + +failed = 0 +compiled = (path for path in sys.argv[1:] if bytecode_expected(path)) +for path in compiled: + to_check = (cache_from_source(path, optimization=opt) for opt in LEVELS) + f_mtime = os.path.getmtime(path) + for pyc in to_check: + c_mtime = os.path.getmtime(pyc) + if c_mtime < f_mtime: + print('Failed bytecompilation timestamps check: ' + f'Bytecode file {pyc} is older than source file {path}', + file=sys.stderr) + failed += 1 + +if failed: + print(f'\n{failed} files failed bytecompilation timestamps check.', + file=sys.stderr) + sys.exit(1) diff --git a/python36.spec b/python36.spec index c0e16e4..acb4bf5 100644 --- a/python36.spec +++ b/python36.spec @@ -232,8 +232,8 @@ Source: https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz # A simple script to check timestamps of bytecode files # Run in check section with Python that is currently being built -# Written by bkabrda -Source8: check-pyc-and-pyo-timestamps.py +# Originally written by bkabrda +Source8: check-pyc-timestamps.py # Desktop menu entry for idle3 Source10: idle3.desktop