blob: b38b456a897a3f121c622ab2ec0e9b1254d44f8b [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env python
Guido van Rossum5378d5c1991-12-18 13:38:27 +00002# Check that all ".pyc" files exist and are up-to-date
Guido van Rossum9a6757d1992-03-30 11:15:26 +00003# Uses module 'os'
Guido van Rossum5378d5c1991-12-18 13:38:27 +00004
5import sys
Guido van Rossum9a6757d1992-03-30 11:15:26 +00006import os
Guido van Rossum5378d5c1991-12-18 13:38:27 +00007from stat import ST_MTIME
Guido van Rossum19b23e51998-10-07 19:45:33 +00008import imp
Guido van Rossum5378d5c1991-12-18 13:38:27 +00009
10def main():
Tim Peters70c43782001-01-17 08:48:39 +000011 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', `MAGIC`
21 for dirname in sys.path:
22 try:
23 names = os.listdir(dirname)
24 except os.error:
25 print 'Cannot list directory', `dirname`
26 continue
27 if not silent:
28 print 'Checking', `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', `name`
37 continue
38 if verbose:
39 print 'Check', `name`, '...'
40 name_c = name + 'c'
41 try:
42 f = open(name_c, 'r')
43 except IOError:
44 print 'Cannot open', `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 `name_c`
52 continue
53 mtime = get_long(mtime_str)
54 if mtime == 0 or mtime == -1:
55 print 'Bad ".pyc" file', `name_c`
56 elif mtime <> st[ST_MTIME]:
57 print 'Out-of-date ".pyc" file',
58 print `name_c`
Guido van Rossum5378d5c1991-12-18 13:38:27 +000059
60def get_long(s):
Tim Peters70c43782001-01-17 08:48:39 +000061 if len(s) <> 4:
62 return -1
63 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
Guido van Rossum5378d5c1991-12-18 13:38:27 +000064
65main()