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 proplist(root, fn):
|
---|
37 | "Return a list of property names for file fn in directory root"
|
---|
38 | path = os.path.join(root, ".svn", "props", fn+".svn-work")
|
---|
39 | try:
|
---|
40 | f = open(path)
|
---|
41 | except IOError:
|
---|
42 | # no properties file: not under version control
|
---|
43 | return []
|
---|
44 | result = []
|
---|
45 | while 1:
|
---|
46 | # key-value pairs, of the form
|
---|
47 | # K <length>
|
---|
48 | # <keyname>NL
|
---|
49 | # V length
|
---|
50 | # <value>NL
|
---|
51 | # END
|
---|
52 | line = f.readline()
|
---|
53 | if line.startswith("END"):
|
---|
54 | break
|
---|
55 | assert line.startswith("K ")
|
---|
56 | L = int(line.split()[1])
|
---|
57 | key = f.read(L)
|
---|
58 | result.append(key)
|
---|
59 | f.readline()
|
---|
60 | line = f.readline()
|
---|
61 | assert line.startswith("V ")
|
---|
62 | L = int(line.split()[1])
|
---|
63 | value = f.read(L)
|
---|
64 | f.readline()
|
---|
65 | f.close()
|
---|
66 | return result
|
---|
67 |
|
---|
68 | possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search
|
---|
69 |
|
---|
70 | for root, dirs, files in os.walk('.'):
|
---|
71 | if '.svn' in dirs:
|
---|
72 | dirs.remove('.svn')
|
---|
73 | for fn in files:
|
---|
74 | if possible_text_file(fn):
|
---|
75 | if 'svn:eol-style' not in proplist(root, fn):
|
---|
76 | path = os.path.join(root, fn)
|
---|
77 | os.system('svn propset svn:eol-style native "%s"' % path)
|
---|