This commit was manufactured by cvs2svn to create tag 'cnrisync'.
[python/dscho.git] / Tools / scripts / checkpyc.py
blob6ef6492a0be4c95e8d401712f458d82fc79034fe
1 #! /usr/local/bin/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
9 def 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 = os.listdir(dirname)
28 except os.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 = os.path.join(dirname, name)
37 try:
38 st = os.stat(name)
39 except os.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`
64 def 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)
69 main()