summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/fixnotice.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/scripts/fixnotice.py')
-rwxr-xr-xTools/scripts/fixnotice.py97
1 files changed, 81 insertions, 16 deletions
diff --git a/Tools/scripts/fixnotice.py b/Tools/scripts/fixnotice.py
index 921d94e..0ae4872 100755
--- a/Tools/scripts/fixnotice.py
+++ b/Tools/scripts/fixnotice.py
@@ -1,5 +1,35 @@
#! /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.
@@ -10,39 +40,74 @@ 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
+
-# " <-- Help Emacs
+def usage(code, msg=''):
+ print __doc__ % globals()
+ if msg:
+ print msg
+ sys.exit(code)
-import os, sys, string
def main():
- args = sys.argv[1:]
- if not args:
- print "No arguments."
+ 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(arg):
- f = open(arg)
+
+def process(file):
+ f = open(file)
data = f.read()
f.close()
- i = string.find(data, OLD_NOTICE)
+ i = data.find(OLD_NOTICE)
if i < 0:
-## print "No old notice in", arg
+ 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 = arg + ".new"
- backup = arg + ".bak"
- print "Replacing notice in", arg, "...",
- sys.stdout.flush()
+ new = file + ".new"
+ backup = file + ".bak"
f = open(new, "w")
f.write(data)
f.close()
- os.rename(arg, backup)
- os.rename(new, arg)
- print "done"
+ os.rename(file, backup)
+ os.rename(new, file)
+
if __name__ == '__main__':
main()