Viewing file: fixnotice.py (2.98 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#! /usr/bin/python2.7
"""(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()
|