changeset 17860:a45b33f12627 stable

verify: fix all doubled-slash sites (issue3665)
author Bryan O'Sullivan <bryano@fb.com>
date Wed, 24 Oct 2012 09:27:47 -0700
parents d38d90ad5bbf
children 3125af2d99d2
files mercurial/verify.py
diffstat 1 files changed, 12 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/verify.py	Wed Oct 24 09:53:10 2012 +0200
+++ b/mercurial/verify.py	Wed Oct 24 09:27:47 2012 -0700
@@ -7,7 +7,7 @@
 
 from node import nullid, short
 from i18n import _
-import os, posixpath
+import os
 import revlog, util, error
 
 def verify(repo):
@@ -17,6 +17,13 @@
     finally:
         lock.release()
 
+def _normpath(f):
+    # under hg < 2.4, convert didn't sanitize paths properly, so a
+    # converted repo may contain repeated slashes
+    while '//' in f:
+        f = f.replace('//', '/')
+    return f
+
 def _verify(repo):
     mflinkrevs = {}
     filelinkrevs = {}
@@ -135,7 +142,7 @@
                 mflinkrevs.setdefault(changes[0], []).append(i)
                 refersmf = True
             for f in changes[3]:
-                filelinkrevs.setdefault(f, []).append(i)
+                filelinkrevs.setdefault(_normpath(f), []).append(i)
         except Exception, inst:
             refersmf = True
             exc(i, _("unpacking changeset %s") % short(n), inst)
@@ -162,7 +169,7 @@
                 if not f:
                     err(lr, _("file without name in manifest"))
                 elif f != "/dev/null":
-                    filenodes.setdefault(f, {}).setdefault(fn, lr)
+                    filenodes.setdefault(_normpath(f), {}).setdefault(fn, lr)
         except Exception, inst:
             exc(lr, _("reading manifest delta %s") % short(n), inst)
     ui.progress(_('checking'), None)
@@ -209,7 +216,7 @@
         if not f:
             err(None, _("cannot decode filename '%s'") % f2)
         elif size > 0 or not revlogv1:
-            storefiles.add(f)
+            storefiles.add(_normpath(f))
 
     files = sorted(set(filenodes) | set(filelinkrevs))
     total = len(files)
@@ -236,12 +243,7 @@
             try:
                 storefiles.remove(ff)
             except KeyError:
-                # under hg < 2.4, convert didn't sanitize paths properly,
-                # so a converted repo may contain repeated slashes
-                try:
-                    storefiles.remove(posixpath.normpath(ff))
-                except KeyError:
-                    err(lr, _("missing revlog!"), ff)
+                err(lr, _("missing revlog!"), ff)
 
         checklog(fl, f, lr)
         seen = {}