[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