use HG10UN header for uncompressed bundle
authorBenoit Boissinot <benoit.boissinot@ens-lyon.org>
Tue, 21 Mar 2006 06:03:33 +0100
changeset 1980 dfb796786337
parent 1979 d545fa1426b9
child 1981 736b6c96bbbc
use HG10UN header for uncompressed bundle - use HG10UN instead of HG11 for uncompressed bundles header - check HG10BZ for compressed bundle - better error handling for invalid header some notes: - people who created uncompressed bundle will no longer be able to use them (it could be fixed with hand-editing) - older hg cannot detect an uncompressed bundle (bzip2 decompression will fail).
mercurial/bundlerepo.py
mercurial/commands.py
--- a/mercurial/bundlerepo.py	Mon Mar 20 17:14:58 2006 +0100
+++ b/mercurial/bundlerepo.py	Tue Mar 21 06:03:33 2006 +0100
@@ -174,12 +174,20 @@
         f = open(bundlename, "rb")
         s = os.fstat(f.fileno())
         self.bundlefile = f
-        header = self.bundlefile.read(4)
-        if header == "HG10":
+        header = self.bundlefile.read(6)
+        if not header.startswith("HG"):
+            raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
+        elif not header.startswith("HG10"):
+            raise util.Abort(_("%s: unknown bundle version") % bundlename)
+        elif header == "HG10BZ":
             raise util.Abort(_("%s: compressed bundle not supported")
                              % bundlename)
-        elif header != "HG11":
-            raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
+        elif header == "HG10UN":
+            # uncompressed bundle supported
+            pass
+        else:
+            raise util.Abort(_("%s: unknown bundle compression type")
+                             % bundlename)
         self.changelog = bundlechangelog(self.opener, self.bundlefile)
         self.manifest = bundlemanifest(self.opener, self.bundlefile,
                                        self.changelog.rev)
--- a/mercurial/commands.py	Mon Mar 20 17:14:58 2006 +0100
+++ b/mercurial/commands.py	Tue Mar 21 06:03:33 2006 +0100
@@ -304,7 +304,7 @@
             fh.write("HG10")
             z = bz2.BZ2Compressor(9)
         else:
-            fh.write("HG11")
+            fh.write("HG10UN")
             z = nocompress()
         while 1:
             chunk = cg.read(4096)
@@ -2569,18 +2569,24 @@
     """
     f = urllib.urlopen(fname)
 
-    header = f.read(4)
-    if header == "HG10":
+    header = f.read(6)
+    if not header.startswith("HG"):
+        raise util.Abort(_("%s: not a Mercurial bundle file") % fname)
+    elif not header.startswith("HG10"):
+        raise util.Abort(_("%s: unknown bundle version") % fname)
+    elif header == "HG10BZ":
         def generator(f):
             zd = bz2.BZ2Decompressor()
+            zd.decompress("BZ")
             for chunk in f:
                 yield zd.decompress(chunk)
-    elif header == "HG11":
+    elif header == "HG10UN":
         def generator(f):
             for chunk in f:
                 yield chunk
     else:
-        raise util.Abort(_("%s: not a Mercurial bundle file") % fname)
+        raise util.Abort(_("%s: unknown bundle compression type")
+                         % fname)
     gen = generator(util.filechunkiter(f, 4096))
     if repo.addchangegroup(util.chunkbuffer(gen)):
         return 1