[Python-checkins] CVS: python/dist/src/Tools/scripts fixnotice.py,1.5,1.6

Barry Warsaw bwarsaw@users.sourceforge.net
Fri, 08 Feb 2002 15:25:48 -0800


Update of /cvsroot/python/python/dist/src/Tools/scripts
In directory usw-pr-cvs1:/tmp/cvs-serv19328

Modified Files:
	fixnotice.py 
Log Message:
Added a module docstring, which doubles as the --help text.

Added a bunch of command line options to make the script more
generic.


Index: fixnotice.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Tools/scripts/fixnotice.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** fixnotice.py	17 Jan 2001 09:13:33 -0000	1.5
--- fixnotice.py	8 Feb 2002 23:25:46 -0000	1.6
***************
*** 1,4 ****
--- 1,34 ----
  #! /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.
***************
*** 11,47 ****
  ******************************************************************/
  """
  
  NEW_NOTICE = ""
  
- # " <-- Help Emacs
  
! import os, sys, string
  
  def main():
!     args = sys.argv[1:]
!     if not args:
!         print "No arguments."
      for arg in args:
          process(arg)
  
! def process(arg):
!     f = open(arg)
      data = f.read()
      f.close()
!     i = string.find(data, OLD_NOTICE)
      if i < 0:
! ##      print "No old notice in", arg
          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()
      f = open(new, "w")
      f.write(data)
      f.close()
!     os.rename(arg, backup)
!     os.rename(new, arg)
!     print "done"
  
  if __name__ == '__main__':
--- 41,112 ----
  ******************************************************************/
  """
+ 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__':