Remove obsolete warning filters in regrtest.py (from issue #7092 -- patch by
[python.git] / Tools / scripts / checkpyc.py
blob8af76726ad648b23c5bec2abd3e893add28d6ce1
1 #! /usr/bin/env python
2 # Check that all ".pyc" files exist and are up-to-date
3 # Uses module 'os'
5 import sys
6 import os
7 from stat import ST_MTIME
8 import imp
10 def main():
11 silent = 0
12 verbose = 0
13 if sys.argv[1:]:
14 if sys.argv[1] == '-v':
15 verbose = 1
16 elif sys.argv[1] == '-s':
17 silent = 1
18 MAGIC = imp.get_magic()
19 if not silent:
20 print 'Using MAGIC word', repr(MAGIC)
21 for dirname in sys.path:
22 try:
23 names = os.listdir(dirname)
24 except os.error:
25 print 'Cannot list directory', repr(dirname)
26 continue
27 if not silent:
28 print 'Checking ', repr(dirname), '...'
29 names.sort()
30 for name in names:
31 if name[-3:] == '.py':
32 name = os.path.join(dirname, name)
33 try:
34 st = os.stat(name)
35 except os.error:
36 print 'Cannot stat', repr(name)
37 continue
38 if verbose:
39 print 'Check', repr(name), '...'
40 name_c = name + 'c'
41 try:
42 f = open(name_c, 'r')
43 except IOError:
44 print 'Cannot open', repr(name_c)
45 continue
46 magic_str = f.read(4)
47 mtime_str = f.read(4)
48 f.close()
49 if magic_str <> MAGIC:
50 print 'Bad MAGIC word in ".pyc" file',
51 print repr(name_c)
52 continue
53 mtime = get_long(mtime_str)
54 if mtime == 0 or mtime == -1:
55 print 'Bad ".pyc" file', repr(name_c)
56 elif mtime <> st[ST_MTIME]:
57 print 'Out-of-date ".pyc" file',
58 print repr(name_c)
60 def get_long(s):
61 if len(s) <> 4:
62 return -1
63 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
65 if __name__ == '__main__':
66 main()