Patchwork [1,of,2] revlog: extract 'checkhash' method

login
register
mail settings
Submitter Wojciech Lopata
Date Aug. 19, 2013, 6:55 p.m.
Message ID <ace27c00a18646ce022b.1376938537@dev1179.prn1.facebook.com>
Download mbox | patch
Permalink /patch/2226/
State Superseded
Commit 55749cb14d248eb8c231767be0709d7ed4d7801c
Headers show

Comments

Wojciech Lopata - Aug. 19, 2013, 6:55 p.m.
# HG changeset patch
# User Wojciech Lopata <lopek@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.

Patch

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):