[PATCH in crew-stable] verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan
bos at serpentine.com
Wed Oct 24 11:28:36 CDT 2012
# HG changeset patch
# User Bryan O'Sullivan <bryano at fb.com>
# Date 1351096067 25200
# Branch stable
# Node ID a45b33f12627859ae5d2f8bb229190682e965754
# Parent d38d90ad5bbf82266b508bf6bff2f77a5b8f0c9e
verify: fix all doubled-slash sites (issue3665)
diff --git a/mercurial/verify.py b/mercurial/verify.py
--- a/mercurial/verify.py
+++ b/mercurial/verify.py
@@ -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 @@ def verify(repo):
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 @@ def _verify(repo):
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 @@ def _verify(repo):
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 @@ def _verify(repo):
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 @@ def _verify(repo):
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 = {}
More information about the Mercurial-devel
mailing list