Mercurial > public > mercurial-scm > hg
comparison mercurial/filelog.py @ 13240:e5060aa22043
filelog: move metadata parsing to a helper function
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 06 Jan 2011 17:04:47 -0600 |
parents | ab9fa7a85dd9 |
children | e8271159c8c2 |
comparison
equal
deleted
inserted
replaced
13239:12ed25f39d0b | 13240:e5060aa22043 |
---|---|
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import revlog | 8 import revlog |
9 | |
10 def _parsemeta(text): | |
11 if not text.startswith('\1\n'): | |
12 return {} | |
13 s = text.index('\1\n', 2) | |
14 mt = text[2:s] | |
15 m = {} | |
16 for l in mt.splitlines(): | |
17 k, v = l.split(": ", 1) | |
18 m[k] = v | |
19 return m | |
9 | 20 |
10 class filelog(revlog.revlog): | 21 class filelog(revlog.revlog): |
11 def __init__(self, opener, path): | 22 def __init__(self, opener, path): |
12 revlog.revlog.__init__(self, opener, | 23 revlog.revlog.__init__(self, opener, |
13 "/".join(("data", path + ".i"))) | 24 "/".join(("data", path + ".i"))) |
17 if not t.startswith('\1\n'): | 28 if not t.startswith('\1\n'): |
18 return t | 29 return t |
19 s = t.index('\1\n', 2) | 30 s = t.index('\1\n', 2) |
20 return t[s + 2:] | 31 return t[s + 2:] |
21 | 32 |
22 def _readmeta(self, node): | |
23 t = self.revision(node) | |
24 if not t.startswith('\1\n'): | |
25 return {} | |
26 s = t.index('\1\n', 2) | |
27 mt = t[2:s] | |
28 m = {} | |
29 for l in mt.splitlines(): | |
30 k, v = l.split(": ", 1) | |
31 m[k] = v | |
32 return m | |
33 | |
34 def add(self, text, meta, transaction, link, p1=None, p2=None): | 33 def add(self, text, meta, transaction, link, p1=None, p2=None): |
35 if meta or text.startswith('\1\n'): | 34 if meta or text.startswith('\1\n'): |
36 mt = ["%s: %s\n" % (k, v) for k, v in sorted(meta.iteritems())] | 35 mt = ["%s: %s\n" % (k, v) for k, v in sorted(meta.iteritems())] |
37 text = "\1\n%s\1\n%s" % ("".join(mt), text) | 36 text = "\1\n%s\1\n%s" % ("".join(mt), text) |
38 return self.addrevision(text, transaction, link, p1, p2) | 37 return self.addrevision(text, transaction, link, p1, p2) |
39 | 38 |
40 def renamed(self, node): | 39 def renamed(self, node): |
41 if self.parents(node)[0] != revlog.nullid: | 40 if self.parents(node)[0] != revlog.nullid: |
42 return False | 41 return False |
43 m = self._readmeta(node) | 42 t = self.revision(node) |
43 m = _parsemeta(t) | |
44 if m and "copy" in m: | 44 if m and "copy" in m: |
45 return (m["copy"], revlog.bin(m["copyrev"])) | 45 return (m["copy"], revlog.bin(m["copyrev"])) |
46 return False | 46 return False |
47 | 47 |
48 def size(self, rev): | 48 def size(self, rev): |