diff options
Diffstat (limited to 'Tools/scripts/checkpyc.py')
| -rwxr-xr-x | Tools/scripts/checkpyc.py | 39 | 
1 files changed, 21 insertions, 18 deletions
diff --git a/Tools/scripts/checkpyc.py b/Tools/scripts/checkpyc.py index 2e8fd5a..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,14 +7,17 @@ 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)) @@ -26,9 +29,8 @@ def main():              continue          if not silent:              print('Checking ', repr(dirname), '...') -        names.sort() -        for name in names: -            if name[-3:] == '.py': +        for name in sorted(names): +            if name.endswith('.py'):                  name = os.path.join(dirname, name)                  try:                      st = os.stat(name) @@ -37,30 +39,31 @@ def main():                      continue                  if verbose:                      print('Check', repr(name), '...') -                name_c = name + 'c' +                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))                      continue -                magic_str = f.read(4) -                mtime_str = f.read(4) -                f.close()                  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: +                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:          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()  | 
