--- a/mercurial/verify.py Sun Feb 07 21:13:24 2016 -0800
+++ b/mercurial/verify.py Wed Feb 03 15:35:15 2016 -0800
@@ -197,7 +197,7 @@
ui.progress(_('checking'), None)
return mflinkrevs, filelinkrevs
- def _verifymanifest(self, mflinkrevs, dir=""):
+ def _verifymanifest(self, mflinkrevs, dir="", storefiles=None):
repo = self.repo
ui = self.ui
mf = self.repo.manifest.dirlog(dir)
@@ -211,6 +211,8 @@
label = "manifest"
if dir:
label = dir
+ revlogfiles = mf.files()
+ storefiles.difference_update(revlogfiles)
if self.refersmf:
# Do not check manifest if there are only changelog entries with
# null manifests.
@@ -260,11 +262,23 @@
if not dir and subdirnodes:
self.ui.status(_("checking directory manifests\n"))
+ storefiles = set()
+ revlogv1 = self.revlogv1
+ for f, f2, size in repo.store.datafiles():
+ if not f:
+ self.err(None, _("cannot decode filename '%s'") % f2)
+ elif (size > 0 or not revlogv1) and f.startswith('meta/'):
+ storefiles.add(_normpath(f))
+
for subdir, linkrevs in subdirnodes.iteritems():
- subdirfilenodes = self._verifymanifest(linkrevs, subdir)
+ subdirfilenodes = self._verifymanifest(linkrevs, subdir, storefiles)
for f, onefilenodes in subdirfilenodes.iteritems():
filenodes.setdefault(f, {}).update(onefilenodes)
+ if not dir and subdirnodes:
+ for f in sorted(storefiles):
+ self.warn(_("warning: orphan revlog '%s'") % f)
+
return filenodes
def _crosscheckfiles(self, filelinkrevs, filenodes):
@@ -402,7 +416,7 @@
short(node), f)
ui.progress(_('checking'), None)
- for f in storefiles:
+ for f in sorted(storefiles):
self.warn(_("warning: orphan revlog '%s'") % f)
return len(files), revisions