mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#! /usr/bin/env python3
 | 
						|
 | 
						|
"""(Ostensibly) fix copyright notices in files.
 | 
						|
 | 
						|
Actually, this script will simply replace a block of text in a file from one
 | 
						|
string to another.  It will only do this once though, i.e. not globally
 | 
						|
throughout the file.  It writes a backup file and then does an os.rename()
 | 
						|
dance for atomicity.
 | 
						|
 | 
						|
Usage: fixnotices.py [options] [filenames]
 | 
						|
Options:
 | 
						|
    -h / --help
 | 
						|
        Print this message and exit
 | 
						|
 | 
						|
    --oldnotice=file
 | 
						|
        Use the notice in the file as the old (to be replaced) string, instead
 | 
						|
        of the hard coded value in the script.
 | 
						|
 | 
						|
    --newnotice=file
 | 
						|
        Use the notice in the file as the new (replacement) string, instead of
 | 
						|
        the hard coded value in the script.
 | 
						|
 | 
						|
    --dry-run
 | 
						|
        Don't actually make the changes, but print out the list of files that
 | 
						|
        would change.  When used with -v, a status will be printed for every
 | 
						|
        file.
 | 
						|
 | 
						|
    -v / --verbose
 | 
						|
        Print a message for every file looked at, indicating whether the file
 | 
						|
        is changed or not.
 | 
						|
"""
 | 
						|
 | 
						|
OLD_NOTICE = """/***********************************************************
 | 
						|
Copyright (c) 2000, BeOpen.com.
 | 
						|
Copyright (c) 1995-2000, Corporation for National Research Initiatives.
 | 
						|
Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
 | 
						|
All rights reserved.
 | 
						|
 | 
						|
See the file "Misc/COPYRIGHT" for information on usage and
 | 
						|
redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 | 
						|
******************************************************************/
 | 
						|
"""
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import getopt
 | 
						|
 | 
						|
NEW_NOTICE = ""
 | 
						|
DRYRUN = 0
 | 
						|
VERBOSE = 0
 | 
						|
 | 
						|
 | 
						|
def usage(code, msg=''):
 | 
						|
    print(__doc__ % globals())
 | 
						|
    if msg:
 | 
						|
        print(msg)
 | 
						|
    sys.exit(code)
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    global DRYRUN, OLD_NOTICE, NEW_NOTICE, VERBOSE
 | 
						|
    try:
 | 
						|
        opts, args = getopt.getopt(sys.argv[1:], 'hv',
 | 
						|
                                   ['help', 'oldnotice=', 'newnotice=',
 | 
						|
                                    'dry-run', 'verbose'])
 | 
						|
    except getopt.error as msg:
 | 
						|
        usage(1, msg)
 | 
						|
 | 
						|
    for opt, arg in opts:
 | 
						|
        if opt in ('-h', '--help'):
 | 
						|
            usage(0)
 | 
						|
        elif opt in ('-v', '--verbose'):
 | 
						|
            VERBOSE = 1
 | 
						|
        elif opt == '--dry-run':
 | 
						|
            DRYRUN = 1
 | 
						|
        elif opt == '--oldnotice':
 | 
						|
            fp = open(arg)
 | 
						|
            OLD_NOTICE = fp.read()
 | 
						|
            fp.close()
 | 
						|
        elif opt == '--newnotice':
 | 
						|
            fp = open(arg)
 | 
						|
            NEW_NOTICE = fp.read()
 | 
						|
            fp.close()
 | 
						|
 | 
						|
    for arg in args:
 | 
						|
        process(arg)
 | 
						|
 | 
						|
 | 
						|
def process(file):
 | 
						|
    f = open(file)
 | 
						|
    data = f.read()
 | 
						|
    f.close()
 | 
						|
    i = data.find(OLD_NOTICE)
 | 
						|
    if i < 0:
 | 
						|
        if VERBOSE:
 | 
						|
            print('no change:', file)
 | 
						|
        return
 | 
						|
    elif DRYRUN or VERBOSE:
 | 
						|
        print('   change:', file)
 | 
						|
    if DRYRUN:
 | 
						|
        # Don't actually change the file
 | 
						|
        return
 | 
						|
    data = data[:i] + NEW_NOTICE + data[i+len(OLD_NOTICE):]
 | 
						|
    new = file + ".new"
 | 
						|
    backup = file + ".bak"
 | 
						|
    f = open(new, "w")
 | 
						|
    f.write(data)
 | 
						|
    f.close()
 | 
						|
    os.rename(file, backup)
 | 
						|
    os.rename(new, file)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |