mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 49fd7fa443
			
		
	
	
		49fd7fa443
		
	
	
	
	
		
			
			number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
		
			
				
	
	
		
			92 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| # Update a bunch of files according to a script.
 | |
| # The input file contains lines of the form <filename>:<lineno>:<text>,
 | |
| # meaning that the given line of the given file is to be replaced
 | |
| # by the given text.  This is useful for performing global substitutions
 | |
| # on grep output:
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| import re
 | |
| 
 | |
| pat = '^([^: \t\n]+):([1-9][0-9]*):'
 | |
| prog = re.compile(pat)
 | |
| 
 | |
| class FileObj:
 | |
|     def __init__(self, filename):
 | |
|         self.filename = filename
 | |
|         self.changed = 0
 | |
|         try:
 | |
|             self.lines = open(filename, 'r').readlines()
 | |
|         except IOError, msg:
 | |
|             print '*** Can\'t open "%s":' % filename, msg
 | |
|             self.lines = None
 | |
|             return
 | |
|         print 'diffing', self.filename
 | |
| 
 | |
|     def finish(self):
 | |
|         if not self.changed:
 | |
|             print 'no changes to', self.filename
 | |
|             return
 | |
|         try:
 | |
|             os.rename(self.filename, self.filename + '~')
 | |
|             fp = open(self.filename, 'w')
 | |
|         except (os.error, IOError), msg:
 | |
|             print '*** Can\'t rewrite "%s":' % self.filename, msg
 | |
|             return
 | |
|         print 'writing', self.filename
 | |
|         for line in self.lines:
 | |
|             fp.write(line)
 | |
|         fp.close()
 | |
|         self.changed = 0
 | |
| 
 | |
|     def process(self, lineno, rest):
 | |
|         if self.lines is None:
 | |
|             print '(not processed): %s:%s:%s' % (
 | |
|                       self.filename, lineno, rest),
 | |
|             return
 | |
|         i = eval(lineno) - 1
 | |
|         if not 0 <= i < len(self.lines):
 | |
|             print '*** Line number out of range: %s:%s:%s' % (
 | |
|                       self.filename, lineno, rest),
 | |
|             return
 | |
|         if self.lines[i] == rest:
 | |
|             print '(no change): %s:%s:%s' % (
 | |
|                       self.filename, lineno, rest),
 | |
|             return
 | |
|         if not self.changed:
 | |
|             self.changed = 1
 | |
|         print '%sc%s' % (lineno, lineno)
 | |
|         print '<', self.lines[i],
 | |
|         print '---'
 | |
|         self.lines[i] = rest
 | |
|         print '>', self.lines[i],
 | |
| 
 | |
| def main():
 | |
|     if sys.argv[1:]:
 | |
|         try:
 | |
|             fp = open(sys.argv[1], 'r')
 | |
|         except IOError, msg:
 | |
|             print 'Can\'t open "%s":' % sys.argv[1], msg
 | |
|             sys.exit(1)
 | |
|     else:
 | |
|         fp = sys.stdin
 | |
|     curfile = None
 | |
|     while 1:
 | |
|         line = fp.readline()
 | |
|         if not line:
 | |
|             if curfile: curfile.finish()
 | |
|             break
 | |
|         n = prog.match(line)
 | |
|         if n < 0:
 | |
|             print 'Funny line:', line,
 | |
|             continue
 | |
|         filename, lineno = prog.group(1, 2)
 | |
|         if not curfile or filename <> curfile.filename:
 | |
|             if curfile: curfile.finish()
 | |
|             curfile = FileObj(filename)
 | |
|         curfile.process(lineno, line[n:])
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |