mercurial/revlog.py
changeset 19624 55749cb14d24
parent 19471 fd1bb7c1be78
child 19625 6a411a06cb1f
equal deleted inserted replaced
19623:d0dbe5330177 19624:55749cb14d24
    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: