blob: 152fb1d2b66c60be282847678027004d3aa73eab [file] [log] [blame]
Guido van Rossum5378d5c1991-12-18 13:38:27 +00001# Check that all ".pyc" files exist and are up-to-date
2# Uses module 'posix'
3
4import sys
5import posix
6import path
7from stat import ST_MTIME
8
9def main():
10 silent = 0
11 verbose = 0
12 if sys.argv[1:]:
13 if sys.argv[1] = '-v':
14 verbose = 1
15 elif sys.argv[1] = '-s':
16 silent = 1
17 MAGIC = '\0\0\0\0'
18 try:
19 if sys.version[:5] >= '0.9.4':
20 MAGIC = '\224\224\224\0'
21 except:
22 pass
23 if not silent:
24 print 'Using MAGIC word', `MAGIC`
25 for dirname in sys.path:
26 try:
27 names = posix.listdir(dirname)
28 except posix.error:
29 print 'Cannot list directory', `dirname`
30 continue
31 if not silent:
32 print 'Checking', `dirname`, '...'
33 names.sort()
34 for name in names:
35 if name[-3:] = '.py':
36 name = path.join(dirname, name)
37 try:
38 st = posix.stat(name)
39 except posix.error:
40 print 'Cannot stat', `name`
41 continue
42 if verbose:
43 print 'Check', `name`, '...'
44 name_c = name + 'c'
45 try:
46 f = open(name_c, 'r')
47 except IOError:
48 print 'Cannot open', `name_c`
49 continue
50 magic_str = f.read(4)
51 mtime_str = f.read(4)
52 f.close()
53 if magic_str <> MAGIC:
54 print 'Bad MAGIC word in ".pyc" file',
55 print `name_c`
56 continue
57 mtime = get_long(mtime_str)
58 if mtime = 0 or mtime = -1:
59 print 'Bad ".pyc" file', `name_c`
60 elif mtime <> st[ST_MTIME]:
61 print 'Out-of-date ".pyc" file',
62 print `name_c`
63
64def get_long(s):
65 if len(s) <> 4:
66 return -1
67 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
68
69main()