#! /usr/bin/env python | |
"""(Ostensibly) fix copyright notices in files. | |
Actually, this sript 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, 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() |