77 lines · 2.2 KB · Python
RawDownload
#! /usr/bin/env python """SVN helper script. Try to set the svn:eol-style property to "native" on every .py, .txt, .c and.h file in the directory tree rooted at the current directory. Files with the svn:eol-style property already set (to anything) are skipped. svn will itself refuse to set this property on a file that's not under SVNcontrol, or that has a binary mime-type property set.  This script inheritsthat behavior, and passes on whatever warning message the failing "svnpropset" command produces. In the Python project, it's safe to invoke this script from the root ofa checkout. No output is produced for files that are ignored.  For a file that getssvn:eol-style set, output looks like:     property 'svn:eol-style' set on 'Lib\ctypes\__init__.py' For a file not under version control:     svn: warning: 'patch-finalizer.txt' is not under version control and for a file with a binary mime-type property:     svn: File 'Lib\test\test_pep263.py' has binary mime type property""" import reimport os def proplist(root, fn):    "Return a list of property names for file fn in directory root"    path = os.path.join(root, ".svn", "props", fn+".svn-work")    try:        f = open(path)    except IOError:        # no properties file: not under version control        return []    result = []    while 1:        # key-value pairs, of the form        # K <length>        # <keyname>NL        # V length        # <value>NL        # END        line = f.readline()        if line.startswith("END"):            break        assert line.startswith("K ")        L = int(line.split()[1])        key = f.read(L)        result.append(key)        f.readline()        line = f.readline()        assert line.startswith("V ")        L = int(line.split()[1])        value = f.read(L)        f.readline()    f.close()    return result possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search for root, dirs, files in os.walk('.'):    if '.svn' in dirs:        dirs.remove('.svn')    for fn in files:        if possible_text_file(fn):            if 'svn:eol-style' not in proplist(root, fn):                path = os.path.join(root, fn)                os.system('svn propset svn:eol-style native "%s"' % path)