verify: print hint to run debugrebuildfncache
authorGregory Szorc <gregory.szorc@gmail.com>
Sat, 20 Jun 2015 20:11:53 -0700
changeset 25653 9d1e04f5dca7
parent 25652 2882d6886919
child 25654 af329a84310c
verify: print hint to run debugrebuildfncache Corrupt fncache is now a recoverable operation. Inform the user how to recover from this warning.
mercurial/verify.py
tests/test-fncache.t
tests/test-verify.t
--- a/mercurial/verify.py	Mon Jun 22 09:59:48 2015 -0700
+++ b/mercurial/verify.py	Sat Jun 20 20:11:53 2015 -0700
@@ -219,6 +219,7 @@
         elif size > 0 or not revlogv1:
             storefiles.add(_normpath(f))
 
+    fncachewarned = False
     files = sorted(set(filenodes) | set(filelinkrevs))
     total = len(files)
     for i, f in enumerate(files):
@@ -245,6 +246,7 @@
                 storefiles.remove(ff)
             except KeyError:
                 warn(_(" warning: revlog '%s' not in fncache!") % ff)
+                fncachewarned = True
 
         checklog(fl, f, lr)
         seen = {}
@@ -313,6 +315,9 @@
                    (len(files), len(cl), revisions))
     if warnings[0]:
         ui.warn(_("%d warnings encountered!\n") % warnings[0])
+    if fncachewarned:
+        ui.warn(_('hint: run "hg debugrebuildfncache" to recover from '
+                  'corrupt fncache\n'))
     if errors[0]:
         ui.warn(_("%d integrity errors encountered!\n") % errors[0])
         if badrevs:
--- a/tests/test-fncache.t	Mon Jun 22 09:59:48 2015 -0700
+++ b/tests/test-fncache.t	Sat Jun 20 20:11:53 2015 -0700
@@ -53,6 +53,23 @@
    warning: revlog 'data/a.i/b.i' not in fncache!
   3 files, 3 changesets, 3 total revisions
   3 warnings encountered!
+  hint: run "hg debugrebuildfncache" to recover from corrupt fncache
+
+Follow the hint to make sure it works
+
+  $ hg debugrebuildfncache
+  adding data/a.i
+  adding data/a.i.hg/c.i
+  adding data/a.i/b.i
+  3 items added, 0 removed from fncache
+
+  $ hg verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  3 files, 3 changesets, 3 total revisions
+
   $ cd ..
 
 Non store repo:
--- a/tests/test-verify.t	Mon Jun 22 09:59:48 2015 -0700
+++ b/tests/test-verify.t	Sat Jun 20 20:11:53 2015 -0700
@@ -55,6 +55,7 @@
    bar.txt@0: 256559129457 in manifests not found
   3 files, 1 changesets, 0 total revisions
   3 warnings encountered!
+  hint: run "hg debugrebuildfncache" to recover from corrupt fncache
   6 integrity errors encountered!
   (first damaged changeset appears to be 0)
   [1]