[PATCH] verification: moving checklog from closure into a separate method

Kostia Balytskyi ikostia at fb.com
Wed Jan 6 13:22:00 CST 2016


# HG changeset patch
# User Kostia Balytskyi <ikostia at fb.com>
# Date 1452034052 28800
#      Tue Jan 05 14:47:32 2016 -0800
# Node ID 70fa18523698d87d14c8a462a1a6b300ffb1a63c
# Parent  b8405d739149cdd6d8d9bd5e3dd2ad8487b1f09a
verification: moving checklog from closure into a separate method

Future goal is to split verify() method into three components:
verification of changelog, manifest and filelogs. Splitting
the method will allow extensions to stub specific stages
of repo verification, for example remotefilelog would be able
to disable a filelogs verification, which doesn't make much
sense for this extension.

diff --git a/mercurial/verify.py b/mercurial/verify.py
--- a/mercurial/verify.py
+++ b/mercurial/verify.py
@@ -80,6 +80,23 @@
             inst = repr(inst)
         self.err(linkrev, "%s: %s" % (msg, inst), filename)
 
+    def checklog(self, obj, name, linkrev):
+        if not len(obj) and (self.havecl or self.havemf):
+            self.err(linkrev, _("empty or missing %s") % name)
+            return
+
+        d = obj.checksize()
+        if d[0]:
+            self.err(None, _("data length off by %d bytes") % d[0], name)
+        if d[1]:
+            self.err(None, _("index contains %d extra bytes") % d[1], name)
+
+        if obj.version != revlog.REVLOGV0:
+            if not self.revlogv1:
+                self.warn(_("warning: `%s' uses revlog format 1") % name)
+        elif self.revlogv1:
+            self.warn(_("warning: `%s' uses revlog format 0") % name)
+
     def verify(self):
         repo = self.repo
         mflinkrevs = {}
@@ -95,23 +112,6 @@
         if not repo.url().startswith('file:'):
             raise error.Abort(_("cannot verify bundle or remote repos"))
 
-        def checklog(obj, name, linkrev):
-            if not len(obj) and (havecl or havemf):
-                self.err(linkrev, _("empty or missing %s") % name)
-                return
-
-            d = obj.checksize()
-            if d[0]:
-                self.err(None, _("data length off by %d bytes") % d[0], name)
-            if d[1]:
-                self.err(None, _("index contains %d extra bytes") % d[1], name)
-
-            if obj.version != revlog.REVLOGV0:
-                if not revlogv1:
-                    self.warn(_("warning: `%s' uses revlog format 1") % name)
-            elif revlogv1:
-                self.warn(_("warning: `%s' uses revlog format 0") % name)
-
         def checkentry(obj, i, node, seen, linkrevs, f):
             lr = obj.linkrev(obj.rev(node))
             if lr < 0 or (havecl and lr not in linkrevs):
@@ -162,7 +162,7 @@
 
         ui.status(_("checking changesets\n"))
         seen = {}
-        checklog(cl, "changelog", 0)
+        self.checklog(cl, "changelog", 0)
         total = len(repo)
         for i in repo:
             ui.progress(_('checking'), i, total=total, unit=_('changesets'))
@@ -187,7 +187,7 @@
         if self.refersmf:
             # Do not check manifest if there are only changelog entries with
             # null manifests.
-            checklog(mf, "manifest", 0)
+            self.checklog(mf, "manifest", 0)
         total = len(mf)
         for i in mf:
             ui.progress(_('checking'), i, total=total, unit=_('manifests'))
@@ -283,7 +283,7 @@
                     self.warn(_(" warning: revlog '%s' not in fncache!") % ff)
                     self.fncachewarned = True
 
-            checklog(fl, f, lr)
+            self.checklog(fl, f, lr)
             seen = {}
             rp = None
             for i in fl:


More information about the Mercurial-devel mailing list