|
33 | 33 | import re |
34 | 34 | import os |
35 | 35 |
|
36 | | -def propfile(root, fn): |
| 36 | +def propfiles(root, fn): |
37 | 37 | default = os.path.join(root, ".svn", "props", fn+".svn-work") |
38 | 38 | try: |
39 | 39 | format = int(open(os.path.join(root, ".svn", "format")).read().strip()) |
40 | 40 | except IOError: |
41 | | - return default |
42 | | - # XXX I don't know what version uses what format; |
43 | | - # this condition is just anecdotal |
44 | | - if format >= 8: |
45 | | - return os.path.join(root, ".svn", "prop-base", fn+".svn-base") |
46 | | - return default |
| 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" |
47 | 48 |
|
48 | 49 | def proplist(root, fn): |
49 | 50 | "Return a list of property names for file fn in directory root" |
50 | | - path = propfile(root, fn) |
51 | | - try: |
52 | | - f = open(path) |
53 | | - except IOError: |
54 | | - # no properties file: not under version control |
55 | | - return [] |
56 | 51 | result = [] |
57 | | - while 1: |
58 | | - # key-value pairs, of the form |
59 | | - # K <length> |
60 | | - # <keyname>NL |
61 | | - # V length |
62 | | - # <value>NL |
63 | | - # END |
64 | | - line = f.readline() |
65 | | - if line.startswith("END"): |
66 | | - break |
67 | | - assert line.startswith("K ") |
68 | | - L = int(line.split()[1]) |
69 | | - key = f.read(L) |
70 | | - result.append(key) |
71 | | - f.readline() |
72 | | - line = f.readline() |
73 | | - assert line.startswith("V ") |
74 | | - L = int(line.split()[1]) |
75 | | - value = f.read(L) |
76 | | - f.readline() |
77 | | - f.close() |
| 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() |
78 | 80 | return result |
79 | 81 |
|
80 | 82 | possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search |
|
0 commit comments