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):