symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/svneol.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 """
       
     4 SVN helper script.
       
     5 
       
     6 Try to set the svn:eol-style property to "native" on every .py, .txt, .c and
       
     7 .h file in the directory tree rooted at the current directory.
       
     8 
       
     9 Files with the svn:eol-style property already set (to anything) are skipped.
       
    10 
       
    11 svn will itself refuse to set this property on a file that's not under SVN
       
    12 control, or that has a binary mime-type property set.  This script inherits
       
    13 that behavior, and passes on whatever warning message the failing "svn
       
    14 propset" command produces.
       
    15 
       
    16 In the Python project, it's safe to invoke this script from the root of
       
    17 a checkout.
       
    18 
       
    19 No output is produced for files that are ignored.  For a file that gets
       
    20 svn:eol-style set, output looks like:
       
    21 
       
    22     property 'svn:eol-style' set on 'Lib\ctypes\__init__.py'
       
    23 
       
    24 For a file not under version control:
       
    25 
       
    26     svn: warning: 'patch-finalizer.txt' is not under version control
       
    27 
       
    28 and for a file with a binary mime-type property:
       
    29 
       
    30     svn: File 'Lib\test\test_pep263.py' has binary mime type property
       
    31 """
       
    32 
       
    33 import re
       
    34 import os
       
    35 
       
    36 def propfiles(root, fn):
       
    37     default = os.path.join(root, ".svn", "props", fn+".svn-work")
       
    38     try:
       
    39         format = int(open(os.path.join(root, ".svn", "format")).read().strip())
       
    40     except IOError:
       
    41         return []
       
    42     if format == 8:
       
    43         # In version 8, committed props are stored in prop-base,
       
    44         # local modifications in props
       
    45         return [os.path.join(root, ".svn", "prop-base", fn+".svn-base"),
       
    46                 os.path.join(root, ".svn", "props", fn+".svn-work")]
       
    47     raise ValueError, "Unknown repository format"
       
    48 
       
    49 def proplist(root, fn):
       
    50     "Return a list of property names for file fn in directory root"
       
    51     result = []
       
    52     for path in propfiles(root, fn):
       
    53         try:
       
    54             f = open(path)
       
    55         except IOError:
       
    56             # no properties file: not under version control,
       
    57             # or no properties set
       
    58             continue
       
    59         while 1:
       
    60             # key-value pairs, of the form
       
    61             # K <length>
       
    62             # <keyname>NL
       
    63             # V length
       
    64             # <value>NL
       
    65             # END
       
    66             line = f.readline()
       
    67             if line.startswith("END"):
       
    68                 break
       
    69             assert line.startswith("K ")
       
    70             L = int(line.split()[1])
       
    71             key = f.read(L)
       
    72             result.append(key)
       
    73             f.readline()
       
    74             line = f.readline()
       
    75             assert line.startswith("V ")
       
    76             L = int(line.split()[1])
       
    77             value = f.read(L)
       
    78             f.readline()
       
    79         f.close()
       
    80     return result
       
    81 
       
    82 possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search
       
    83 
       
    84 for root, dirs, files in os.walk('.'):
       
    85     if '.svn' in dirs:
       
    86         dirs.remove('.svn')
       
    87     for fn in files:
       
    88         if possible_text_file(fn):
       
    89             if 'svn:eol-style' not in proplist(root, fn):
       
    90                 path = os.path.join(root, fn)
       
    91                 os.system('svn propset svn:eol-style native "%s"' % path)