[PATCH 1 of 2] revlog: extract 'checkhash' method
Wojciech Lopata
lopek at fb.com
Mon Aug 19 14:46:11 CDT 2013
# HG changeset patch
# User Wojciech Lopata <lopek at fb.com>
# Date 1376935598 25200
# Mon Aug 19 11:06:38 2013 -0700
# Node ID 89b4d30ddd5c1d09c61d4578b1ad4875b7780418
# Parent 6ac206fb6f27492a98f46bbff090407ee1b1de72
revlog: extract 'checkhash' method
Extract method that decides whether nodeid is correct for paricular revision
text and parent nodes. Having this method extracted will allow revlog
subclasses to implement custom way of computing nodes.
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -14,7 +14,7 @@
# import stuff from node for others to import from revlog
from node import bin, hex, nullid, nullrev
from i18n import _
-import ancestor, mdiff, parsers, error, util
+import ancestor, mdiff, parsers, error, util, templatefilters
import struct, zlib, errno
_pack = struct.pack
@@ -943,10 +943,14 @@
def _checkhash(self, text, node, rev):
p1, p2 = self.parents(node)
+ self.checkhash(text, p1, p2, node, rev)
+ return text
+
+ def checkhash(self, text, p1, p2, node, rev=None):
if node != hash(text, p1, p2):
- raise RevlogError(_("integrity check failed on %s:%d")
- % (self.indexfile, rev))
- return text
+ revornode = rev or templatefilters.short(hex(node))
+ raise RevlogError(_("integrity check failed on %s:%s")
+ % (self.indexfile, revornode))
def checkinlinesize(self, tr, fp=None):
if not self._inline or (self.start(-2) + self.length(-2)) < _maxinline:
@@ -1063,9 +1067,7 @@
ifh.flush()
basetext = self.revision(self.node(cachedelta[0]))
btext[0] = mdiff.patch(basetext, cachedelta[1])
- chk = hash(btext[0], p1, p2)
- if chk != node:
- raise RevlogError(_("consistency error in delta"))
+ self.checkhash(btext[0], p1, p2, node)
return btext[0]
def builddelta(rev):
More information about the Mercurial-devel
mailing list