Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/svneol.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | ed8adfef26c6 |
| children | fcfe324663a6 |
| rev | line source |
|---|---|
|
36907
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
2 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
3 """ |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
4 SVN helper script. |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
5 |
|
36908
3e2b5747038f
Taught svneol to look at .c and .h files too, and
Tim Peters <tim.peters@gmail.com>
parents:
36907
diff
changeset
|
6 Try to set the svn:eol-style property to "native" on every .py, .txt, .c and |
|
3e2b5747038f
Taught svneol to look at .c and .h files too, and
Tim Peters <tim.peters@gmail.com>
parents:
36907
diff
changeset
|
7 .h file in the directory tree rooted at the current directory. |
|
36907
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
8 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
9 Files with the svn:eol-style property already set (to anything) are skipped. |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
10 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
11 svn will itself refuse to set this property on a file that's not under SVN |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
12 control, or that has a binary mime-type property set. This script inherits |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
13 that behavior, and passes on whatever warning message the failing "svn |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
14 propset" command produces. |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
15 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
16 In the Python project, it's safe to invoke this script from the root of |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
17 a checkout. |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
18 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
19 No output is produced for files that are ignored. For a file that gets |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
20 svn:eol-style set, output looks like: |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
21 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
22 property 'svn:eol-style' set on 'Lib\ctypes\__init__.py' |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
23 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
24 For a file not under version control: |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
25 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
26 svn: warning: 'patch-finalizer.txt' is not under version control |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
27 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
28 and for a file with a binary mime-type property: |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
29 |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
30 svn: File 'Lib\test\test_pep263.py' has binary mime type property |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
31 """ |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
32 |
|
36908
3e2b5747038f
Taught svneol to look at .c and .h files too, and
Tim Peters <tim.peters@gmail.com>
parents:
36907
diff
changeset
|
33 import re |
|
36907
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
34 import os |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
35 |
|
47712
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
36 def propfiles(root, fn): |
|
47709
e8df9e4873b4
Merged revisions 64262 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
36918
diff
changeset
|
37 default = os.path.join(root, ".svn", "props", fn+".svn-work") |
|
e8df9e4873b4
Merged revisions 64262 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
36918
diff
changeset
|
38 try: |
|
e8df9e4873b4
Merged revisions 64262 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
36918
diff
changeset
|
39 format = int(open(os.path.join(root, ".svn", "format")).read().strip()) |
|
e8df9e4873b4
Merged revisions 64262 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
36918
diff
changeset
|
40 except IOError: |
|
47712
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
41 return [] |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47712
diff
changeset
|
42 if format in (8, 9): |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47712
diff
changeset
|
43 # In version 8 and 9, committed props are stored in prop-base, local |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47712
diff
changeset
|
44 # modifications in props |
|
47712
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
45 return [os.path.join(root, ".svn", "prop-base", fn+".svn-base"), |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
46 os.path.join(root, ".svn", "props", fn+".svn-work")] |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
47 raise ValueError, "Unknown repository format" |
|
47709
e8df9e4873b4
Merged revisions 64262 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
36918
diff
changeset
|
48 |
|
36909
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
49 def proplist(root, fn): |
|
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
50 "Return a list of property names for file fn in directory root" |
|
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
51 result = [] |
|
47712
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
52 for path in propfiles(root, fn): |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
53 try: |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
54 f = open(path) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
55 except IOError: |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
56 # no properties file: not under version control, |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
57 # or no properties set |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
58 continue |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
59 while 1: |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
60 # key-value pairs, of the form |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
61 # K <length> |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
62 # <keyname>NL |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
63 # V length |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
64 # <value>NL |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
65 # END |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
66 line = f.readline() |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
67 if line.startswith("END"): |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
68 break |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
69 assert line.startswith("K ") |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
70 L = int(line.split()[1]) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
71 key = f.read(L) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
72 result.append(key) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
73 f.readline() |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
74 line = f.readline() |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
75 assert line.startswith("V ") |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
76 L = int(line.split()[1]) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
77 value = f.read(L) |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
78 f.readline() |
|
61e5286d937c
Merged revisions 64265 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47709
diff
changeset
|
79 f.close() |
|
36909
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
80 return result |
|
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
81 |
|
36918
6e9b368789df
Deleted the svn_mime-type application/octet-stream from PCBuild/pcbuild.sln.
Thomas Heller <theller@ctypes.org>
parents:
36909
diff
changeset
|
82 possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search |
|
36908
3e2b5747038f
Taught svneol to look at .c and .h files too, and
Tim Peters <tim.peters@gmail.com>
parents:
36907
diff
changeset
|
83 |
|
36907
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
84 for root, dirs, files in os.walk('.'): |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
85 if '.svn' in dirs: |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
86 dirs.remove('.svn') |
|
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
87 for fn in files: |
|
36908
3e2b5747038f
Taught svneol to look at .c and .h files too, and
Tim Peters <tim.peters@gmail.com>
parents:
36907
diff
changeset
|
88 if possible_text_file(fn): |
|
36909
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
89 if 'svn:eol-style' not in proplist(root, fn): |
|
0bf53639014a
Directly read working copy data to obtain list of properties.
Martin v. Löwis <martin@v.loewis.de>
parents:
36908
diff
changeset
|
90 path = os.path.join(root, fn) |
|
36907
69eb6d1b99f5
Simple utility to add svn:eol-style to text files under
Tim Peters <tim.peters@gmail.com>
parents:
diff
changeset
|
91 os.system('svn propset svn:eol-style native "%s"' % path) |
