Mercurial > hgsubversion
comparison svnexternals.py @ 174:f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Fri, 02 Jan 2009 15:54:05 -0600 |
parents | |
children | 2412800b1258 |
comparison
equal
deleted
inserted
replaced
173:f244eaee5069 | 174:f80132c5fea5 |
---|---|
1 import cStringIO | |
2 | |
3 from mercurial import util as merc_util | |
4 | |
5 class externalsfile(dict): | |
6 """Map svn directories to lists of externals entries. | |
7 """ | |
8 def __init__(self): | |
9 super(externalsfile, self).__init__() | |
10 self.encoding = 'utf-8' | |
11 | |
12 def __setitem__(self, key, value): | |
13 if value is None: | |
14 value = [] | |
15 elif isinstance(value, basestring): | |
16 value = value.splitlines() | |
17 if key == '.': | |
18 key = '' | |
19 if not value: | |
20 if key in self: | |
21 del self[key] | |
22 else: | |
23 super(externalsfile, self).__setitem__(key, value) | |
24 | |
25 def write(self): | |
26 fp = cStringIO.StringIO() | |
27 for target in merc_util.sort(self): | |
28 lines = self[target] | |
29 if not lines: | |
30 continue | |
31 if not target: | |
32 target = '.' | |
33 fp.write('[%s]\n' % target) | |
34 for l in lines: | |
35 l = ' ' + l + '\n' | |
36 fp.write(l) | |
37 return fp.getvalue() | |
38 | |
39 def read(self, data): | |
40 self.clear() | |
41 fp = cStringIO.StringIO(data) | |
42 dirs = {} | |
43 target = None | |
44 for line in fp.readlines(): | |
45 if not line.strip(): | |
46 continue | |
47 if line.startswith('['): | |
48 line = line.strip() | |
49 if line[-1] != ']': | |
50 raise merc_util.Abort('invalid externals section name: %s' % line) | |
51 target = line[1:-1] | |
52 if target == '.': | |
53 target = '' | |
54 elif line.startswith(' '): | |
55 line = line.rstrip('\n') | |
56 if target is None or not line: | |
57 continue | |
58 self.setdefault(target, []).append(line[1:]) | |
59 |