mercurial/changegroup.py
changeset 12042 210049a8d16e
parent 12041 270fb4d39153
child 12043 bef5effb3db0
--- a/mercurial/changegroup.py	Wed Aug 25 15:33:05 2010 -0500
+++ b/mercurial/changegroup.py	Wed Aug 25 15:33:06 2010 -0500
@@ -138,24 +138,24 @@
         raise util.Abort("unknown bundle compression '%s'" % alg)
     return generator(fh)
 
-def unbundle(header, fh):
-    if not header.startswith('HG'):
-        def fixup(f, h):
-            yield h
-            for x in f:
-                yield x
-        fh = fixup(f, h)
-        header = "HG10UN"
-
-    alg = header[4:6]
-    return util.chunkbuffer(decompressor(fh, alg))
-
 def readbundle(fh, fname):
     header = fh.read(6)
-    if not header.startswith('HG'):
-        raise util.Abort(_('%s: not a Mercurial bundle file') % fname)
-    if not header.startswith('HG10'):
-        raise util.Abort(_('%s: unknown bundle version') % fname)
-    elif header not in bundletypes:
-        raise util.Abort(_('%s: unknown bundle compression type') % fname)
-    return unbundle(header, fh)
+
+    if not fname:
+        fname = "stream"
+        if not header.startswith('HG') and header.startswith('\0'):
+            # headerless bundle, clean things up
+            def fixup(f, h):
+                yield h
+                for x in f:
+                    yield x
+            fh = fixup(fh, header)
+            header = "HG10UN"
+
+    magic, version, alg = header[0:2], header[2:4], header[4:6]
+
+    if magic != 'HG':
+        raise util.Abort(_('%s: not a Mercurial bundle') % fname)
+    if version != '10':
+        raise util.Abort(_('%s: unknown bundle version %s') % (fname, version))
+    return util.chunkbuffer(decompressor(fh, alg))