home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / pythonwin / python.exe / FIXNOTICE.PY < prev    next >
Encoding:
Python Source  |  2002-02-09  |  3.1 KB  |  114 lines

  1. #! /usr/bin/env python
  2.  
  3. """(Ostensibly) fix copyright notices in files.
  4.  
  5. Actually, this sript will simply replace a block of text in a file from one
  6. string to another.  It will only do this once though, i.e. not globally
  7. throughout the file.  It writes a backup file and then does an os.rename()
  8. dance for atomicity.
  9.  
  10. Usage: fixnotices.py [options] [filenames]
  11. Options:
  12.     -h / --help
  13.         Print this message and exit
  14.  
  15.     --oldnotice=file
  16.         Use the notice in the file as the old (to be replaced) string, instead
  17.         of the hard coded value in the script.
  18.  
  19.     --newnotice=file
  20.         Use the notice in the file as the new (replacement) string, instead of
  21.         the hard coded value in the script.
  22.  
  23.     --dry-run
  24.         Don't actually make the changes, but print out the list of files that
  25.         would change.  When used with -v, a status will be printed for every
  26.         file.
  27.  
  28.     -v / --verbose
  29.         Print a message for every file looked at, indicating whether the file
  30.         is changed or not.
  31. """
  32.  
  33. OLD_NOTICE = """/***********************************************************
  34. Copyright (c) 2000, BeOpen.com.
  35. Copyright (c) 1995-2000, Corporation for National Research Initiatives.
  36. Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
  37. All rights reserved.
  38.  
  39. See the file "Misc/COPYRIGHT" for information on usage and
  40. redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  41. ******************************************************************/
  42. """
  43. import os
  44. import sys
  45. import getopt
  46.  
  47. NEW_NOTICE = ""
  48. DRYRUN = 0
  49. VERBOSE = 0
  50.  
  51.  
  52. def usage(code, msg=''):
  53.     print __doc__ % globals()
  54.     if msg:
  55.         print msg
  56.     sys.exit(code)
  57.  
  58.  
  59. def main():
  60.     global DRYRUN, OLD_NOTICE, NEW_NOTICE, VERBOSE
  61.     try:
  62.         opts, args = getopt.getopt(sys.argv[1:], 'hv',
  63.                                    ['help', 'oldnotice=', 'newnotice=',
  64.                                     'dry-run', 'verbose'])
  65.     except getopt.error, msg:
  66.         usage(1, msg)
  67.  
  68.     for opt, arg in opts:
  69.         if opt in ('-h', '--help'):
  70.             usage(0)
  71.         elif opt in ('-v', '--verbose'):
  72.             VERBOSE = 1
  73.         elif opt == '--dry-run':
  74.             DRYRUN = 1
  75.         elif opt == '--oldnotice':
  76.             fp = open(arg)
  77.             OLD_NOTICE = fp.read()
  78.             fp.close()
  79.         elif opt == '--newnotice':
  80.             fp = open(arg)
  81.             NEW_NOTICE = fp.read()
  82.             fp.close()
  83.  
  84.     for arg in args:
  85.         process(arg)
  86.  
  87.  
  88. def process(file):
  89.     f = open(file)
  90.     data = f.read()
  91.     f.close()
  92.     i = data.find(OLD_NOTICE)
  93.     if i < 0:
  94.         if VERBOSE:
  95.             print 'no change:', file
  96.         return
  97.     elif DRYRUN or VERBOSE:
  98.         print '   change:', file
  99.     if DRYRUN:
  100.         # Don't actually change the file
  101.         return
  102.     data = data[:i] + NEW_NOTICE + data[i+len(OLD_NOTICE):]
  103.     new = file + ".new"
  104.     backup = file + ".bak"
  105.     f = open(new, "w")
  106.     f.write(data)
  107.     f.close()
  108.     os.rename(file, backup)
  109.     os.rename(new, file)
  110.  
  111.  
  112. if __name__ == '__main__':
  113.     main()
  114.