]> granicus.if.org Git - python/commitdiff
Added a module docstring, which doubles as the --help text.
authorBarry Warsaw <barry@python.org>
Fri, 8 Feb 2002 23:25:46 +0000 (23:25 +0000)
committerBarry Warsaw <barry@python.org>
Fri, 8 Feb 2002 23:25:46 +0000 (23:25 +0000)
Added a bunch of command line options to make the script more
generic.

Tools/scripts/fixnotice.py

index 921d94e06595c62c1cf09fda04f74488dc3dcf5e..0ae4872003a0bfbd6943b6b18e4c4bbcb7ee3418 100755 (executable)
@@ -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()