114 lines
3 KiB
Python
114 lines
3 KiB
Python
|
#! /usr/bin/env python
|
||
|
|
||
|
"""(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, 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()
|