symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/fixnotice.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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()