12 """ |
12 """ |
13 |
13 |
14 # import stuff from node for others to import from revlog |
14 # import stuff from node for others to import from revlog |
15 from node import bin, hex, nullid, nullrev |
15 from node import bin, hex, nullid, nullrev |
16 from i18n import _ |
16 from i18n import _ |
17 import ancestor, mdiff, parsers, error, util |
17 import ancestor, mdiff, parsers, error, util, templatefilters |
18 import struct, zlib, errno |
18 import struct, zlib, errno |
19 |
19 |
20 _pack = struct.pack |
20 _pack = struct.pack |
21 _unpack = struct.unpack |
21 _unpack = struct.unpack |
22 _compress = zlib.compress |
22 _compress = zlib.compress |
941 self._cache = (node, rev, text) |
941 self._cache = (node, rev, text) |
942 return text |
942 return text |
943 |
943 |
944 def _checkhash(self, text, node, rev): |
944 def _checkhash(self, text, node, rev): |
945 p1, p2 = self.parents(node) |
945 p1, p2 = self.parents(node) |
|
946 self.checkhash(text, p1, p2, node, rev) |
|
947 return text |
|
948 |
|
949 def checkhash(self, text, p1, p2, node, rev=None): |
946 if node != hash(text, p1, p2): |
950 if node != hash(text, p1, p2): |
947 raise RevlogError(_("integrity check failed on %s:%d") |
951 revornode = rev |
948 % (self.indexfile, rev)) |
952 if revornode is None: |
949 return text |
953 revornode = templatefilters.short(hex(node)) |
|
954 raise RevlogError(_("integrity check failed on %s:%s") |
|
955 % (self.indexfile, revornode)) |
950 |
956 |
951 def checkinlinesize(self, tr, fp=None): |
957 def checkinlinesize(self, tr, fp=None): |
952 if not self._inline or (self.start(-2) + self.length(-2)) < _maxinline: |
958 if not self._inline or (self.start(-2) + self.length(-2)) < _maxinline: |
953 return |
959 return |
954 |
960 |
1061 if dfh: |
1067 if dfh: |
1062 dfh.flush() |
1068 dfh.flush() |
1063 ifh.flush() |
1069 ifh.flush() |
1064 basetext = self.revision(self.node(cachedelta[0])) |
1070 basetext = self.revision(self.node(cachedelta[0])) |
1065 btext[0] = mdiff.patch(basetext, cachedelta[1]) |
1071 btext[0] = mdiff.patch(basetext, cachedelta[1]) |
1066 chk = hash(btext[0], p1, p2) |
1072 self.checkhash(btext[0], p1, p2, node) |
1067 if chk != node: |
|
1068 raise RevlogError(_("consistency error in delta")) |
|
1069 return btext[0] |
1073 return btext[0] |
1070 |
1074 |
1071 def builddelta(rev): |
1075 def builddelta(rev): |
1072 # can we use the cached delta? |
1076 # can we use the cached delta? |
1073 if cachedelta and cachedelta[0] == rev: |
1077 if cachedelta and cachedelta[0] == rev: |