mirror of
				https://github.com/python/cpython.git
				synced 2025-10-28 12:15:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/local/bin/python
 | |
| # Check that all ".pyc" files exist and are up-to-date
 | |
| # Uses module 'os'
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| from stat import ST_MTIME
 | |
| 
 | |
| def main():
 | |
| 	silent = 0
 | |
| 	verbose = 0
 | |
| 	if sys.argv[1:]:
 | |
| 		if sys.argv[1] == '-v':
 | |
| 			verbose = 1
 | |
| 		elif sys.argv[1] == '-s':
 | |
| 			silent = 1
 | |
| 	MAGIC = '\0\0\0\0'
 | |
| 	try:
 | |
| 		if sys.version[:5] >= '0.9.4':
 | |
| 			MAGIC = '\224\224\224\0'
 | |
| 	except:
 | |
| 		pass
 | |
| 	if not silent:
 | |
| 		print 'Using MAGIC word', `MAGIC`
 | |
| 	for dirname in sys.path:
 | |
| 		try:
 | |
| 			names = os.listdir(dirname)
 | |
| 		except os.error:
 | |
| 			print 'Cannot list directory', `dirname`
 | |
| 			continue
 | |
| 		if not silent:
 | |
| 			print 'Checking', `dirname`, '...'
 | |
| 		names.sort()
 | |
| 		for name in names:
 | |
| 			if name[-3:] == '.py':
 | |
| 				name = os.path.join(dirname, name)
 | |
| 				try:
 | |
| 					st = os.stat(name)
 | |
| 				except os.error:
 | |
| 					print 'Cannot stat', `name`
 | |
| 					continue
 | |
| 				if verbose:
 | |
| 					print 'Check', `name`, '...'
 | |
| 				name_c = name + 'c'
 | |
| 				try:
 | |
| 					f = open(name_c, 'r')
 | |
| 				except IOError:
 | |
| 					print 'Cannot open', `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',
 | |
| 					print `name_c`
 | |
| 					continue
 | |
| 				mtime = get_long(mtime_str)
 | |
| 				if mtime == 0 or mtime == -1:
 | |
| 					print 'Bad ".pyc" file', `name_c`
 | |
| 				elif mtime <> st[ST_MTIME]:
 | |
| 					print 'Out-of-date ".pyc" file',
 | |
| 					print `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)
 | |
| 
 | |
| main()
 | 
