mirror of https://github.com/python/cpython
114 lines
3.0 KiB
Python
Executable File
114 lines
3.0 KiB
Python
Executable File
#! /usr/bin/env python3
|
|
|
|
"""(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 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()
|