diff options
Diffstat (limited to 'Tools/scripts/checkpyc.py')
| -rwxr-xr-x | Tools/scripts/checkpyc.py | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/Tools/scripts/checkpyc.py b/Tools/scripts/checkpyc.py index 8af7672..d4fdce2 100755 --- a/Tools/scripts/checkpyc.py +++ b/Tools/scripts/checkpyc.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Check that all ".pyc" files exist and are up-to-date # Uses module 'os' @@ -7,60 +7,63 @@ import os from stat import ST_MTIME import imp +# PEP 3147 compatibility (PYC Repository Directories) +cache_from_source = (imp.cache_from_source if hasattr(imp, 'get_tag') else + lambda path: path + 'c') + + def main(): - silent = 0 - verbose = 0 - if sys.argv[1:]: - if sys.argv[1] == '-v': - verbose = 1 - elif sys.argv[1] == '-s': - silent = 1 + if len(sys.argv) > 1: + verbose = (sys.argv[1] == '-v') + silent = (sys.argv[1] == '-s') + else: + verbose = silent = False MAGIC = imp.get_magic() if not silent: - print 'Using MAGIC word', repr(MAGIC) + print('Using MAGIC word', repr(MAGIC)) for dirname in sys.path: try: names = os.listdir(dirname) except os.error: - print 'Cannot list directory', repr(dirname) + print('Cannot list directory', repr(dirname)) continue if not silent: - print 'Checking ', repr(dirname), '...' - names.sort() - for name in names: - if name[-3:] == '.py': + print('Checking ', repr(dirname), '...') + for name in sorted(names): + if name.endswith('.py'): name = os.path.join(dirname, name) try: st = os.stat(name) except os.error: - print 'Cannot stat', repr(name) + print('Cannot stat', repr(name)) continue if verbose: - print 'Check', repr(name), '...' - name_c = name + 'c' + print('Check', repr(name), '...') + name_c = cache_from_source(name) try: - f = open(name_c, 'r') + with open(name_c, 'rb') as f: + magic_str = f.read(4) + mtime_str = f.read(4) except IOError: - print 'Cannot open', repr(name_c) + print('Cannot open', repr(name_c)) continue - magic_str = f.read(4) - mtime_str = f.read(4) - f.close() - if magic_str <> MAGIC: - print 'Bad MAGIC word in ".pyc" file', - print repr(name_c) + if magic_str != MAGIC: + print('Bad MAGIC word in ".pyc" file', end=' ') + print(repr(name_c)) continue mtime = get_long(mtime_str) - if mtime == 0 or mtime == -1: - print 'Bad ".pyc" file', repr(name_c) - elif mtime <> st[ST_MTIME]: - print 'Out-of-date ".pyc" file', - print repr(name_c) + if mtime in {0, -1}: + print('Bad ".pyc" file', repr(name_c)) + elif mtime != st[ST_MTIME]: + print('Out-of-date ".pyc" file', end=' ') + print(repr(name_c)) + def get_long(s): - if len(s) <> 4: + if len(s) != 4: return -1 - return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24) + return s[0] + (s[1] << 8) + (s[2] << 16) + (s[3] << 24) + if __name__ == '__main__': main() |
