113 lines · 3.0 KB · Python
RawDownload
#! /usr/bin/env python """(Ostensibly) fix copyright notices in files. Actually, this sript will simply replace a block of text in a file from onestring to another.  It will only do this once though, i.e. not globallythroughout 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 andredistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.******************************************************************/"""import osimport sysimport getopt NEW_NOTICE = ""DRYRUN = 0VERBOSE = 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()