Fix some problems when working on broken repositories:
authorThomas Arendsen Hein <thomas@intevation.de>
Wed, 08 Mar 2006 00:27:23 +0100
changeset 1853 5ac811b720de
parent 1852 fdf9cbf56ec7
child 1854 638b1bc6c6c9
child 1857 848152a2e67f
Fix some problems when working on broken repositories: Fix tracebacks in hg verify for certain repo errors. Print compression type byte encoded safely.
mercurial/localrepo.py
mercurial/revlog.py
--- a/mercurial/localrepo.py	Tue Mar 07 22:41:24 2006 +0100
+++ b/mercurial/localrepo.py	Wed Mar 08 00:27:23 2006 +0100
@@ -1771,6 +1771,7 @@
                 raise
             except Exception, inst:
                 err(_("unpacking changeset %s: %s") % (short(n), inst))
+                continue
 
             neededmanifests[changes[0]] = n
 
@@ -1808,10 +1809,14 @@
                 raise
             except Exception, inst:
                 err(_("unpacking manifest %s: %s") % (short(n), inst))
+                continue
 
-            ff = [ l.split('\0') for l in delta.splitlines() ]
-            for f, fn in ff:
-                filenodes.setdefault(f, {})[bin(fn[:40])] = 1
+            try:
+                ff = [ l.split('\0') for l in delta.splitlines() ]
+                for f, fn in ff:
+                    filenodes.setdefault(f, {})[bin(fn[:40])] = 1
+            except (ValueError, TypeError), inst:
+                err(_("broken delta in manifest %s: %s") % (short(n), inst))
 
         self.ui.status(_("crosschecking files in changesets and manifests\n"))
 
@@ -1835,6 +1840,9 @@
             if f == "/dev/null":
                 continue
             files += 1
+            if not f:
+                err(_("file without name in manifest %s") % short(n))
+                continue
             fl = self.file(f)
             checksize(fl, f)
 
@@ -1852,7 +1860,7 @@
                     del filenodes[f][n]
 
                 flr = fl.linkrev(n)
-                if flr not in filelinkrevs[f]:
+                if flr not in filelinkrevs.get(f, []):
                     err(_("%s:%s points to unexpected changeset %d")
                             % (f, short(n), flr))
                 else:
--- a/mercurial/revlog.py	Tue Mar 07 22:41:24 2006 +0100
+++ b/mercurial/revlog.py	Wed Mar 08 00:27:23 2006 +0100
@@ -48,7 +48,7 @@
     if t == '\0': return bin
     if t == 'x': return zlib.decompress(bin)
     if t == 'u': return bin[1:]
-    raise RevlogError(_("unknown compression type %s") % t)
+    raise RevlogError(_("unknown compression type %r") % t)
 
 indexformat = ">4l20s20s20s"