##// END OF EJS Templates
merge with stable
Benoit Boissinot -
r10706:d8d1b56d merge default
parent child Browse files
Show More
@@ -1,66 +1,66
1 1 # filelog.py - file history class for mercurial
2 2 #
3 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 import revlog
9 9
10 10 class filelog(revlog.revlog):
11 11 def __init__(self, opener, path):
12 12 revlog.revlog.__init__(self, opener,
13 13 "/".join(("data", path + ".i")))
14 14
15 15 def read(self, node):
16 16 t = self.revision(node)
17 17 if not t.startswith('\1\n'):
18 18 return t
19 19 s = t.index('\1\n', 2)
20 20 return t[s + 2:]
21 21
22 22 def _readmeta(self, node):
23 23 t = self.revision(node)
24 24 if not t.startswith('\1\n'):
25 25 return {}
26 26 s = t.index('\1\n', 2)
27 27 mt = t[2:s]
28 28 m = {}
29 29 for l in mt.splitlines():
30 30 k, v = l.split(": ", 1)
31 31 m[k] = v
32 32 return m
33 33
34 34 def add(self, text, meta, transaction, link, p1=None, p2=None):
35 35 if meta or text.startswith('\1\n'):
36 36 mt = ["%s: %s\n" % (k, v) for k, v in sorted(meta.iteritems())]
37 37 text = "\1\n%s\1\n%s" % ("".join(mt), text)
38 38 return self.addrevision(text, transaction, link, p1, p2)
39 39
40 40 def renamed(self, node):
41 41 if self.parents(node)[0] != revlog.nullid:
42 42 return False
43 43 m = self._readmeta(node)
44 44 if m and "copy" in m:
45 45 return (m["copy"], revlog.bin(m["copyrev"]))
46 46 return False
47 47
48 48 def size(self, rev):
49 49 """return the size of a given revision"""
50 50
51 51 # for revisions with renames, we have to go the slow way
52 52 node = self.node(rev)
53 53 if self.renamed(node):
54 54 return len(self.read(node))
55 55
56 56 return revlog.revlog.size(self, rev)
57 57
58 58 def cmp(self, node, text):
59 59 """compare text with a given file revision"""
60 60
61 61 # for renames, we have to go the slow way
62 if self.renamed(node):
62 if text.startswith('\1\n') or self.renamed(node):
63 63 t2 = self.read(node)
64 64 return t2 != text
65 65
66 66 return revlog.revlog.cmp(self, node, text)
General Comments 0
You need to be logged in to leave comments. Login now