[PATCH 1 of 2] revlog: extract 'checkhash' method

Wojciech Lopata lopek at fb.com
Mon Aug 19 13:55:37 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 ace27c00a18646ce022b5b75448246c1423bde6a
# Parent  5963896237a8892a98eefbb15f36da20bf3859ea
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
@@ -943,10 +943,13 @@
 
     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
+            raise RevlogError(_("integrity check failed on %s:%s")
+                % (self.indexfile, str(rev or node)))
 
     def checkinlinesize(self, tr, fp=None):
         if not self._inline or (self.start(-2) + self.length(-2)) < _maxinline:
@@ -1063,9 +1066,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