mercurial/bundle2.py
changeset 24648 5cac3accdaa1
parent 24642 54e5c239c2d9
child 24686 e0e28e910fa3
--- a/mercurial/bundle2.py	Tue Apr 07 15:18:52 2015 -0700
+++ b/mercurial/bundle2.py	Mon Apr 06 17:23:11 2015 -0700
@@ -525,12 +525,13 @@
     """return a valid unbundler object for a given header"""
     if header is None:
         header = changegroup.readexactly(fp, 4)
-        magic, version = header[0:2], header[2:4]
-        if magic != 'HG':
-            raise util.Abort(_('not a Mercurial bundle'))
-        if version != '2Y':
-            raise util.Abort(_('unknown bundle version %s') % version)
-    unbundler = unbundle20(ui, fp)
+    magic, version = header[0:2], header[2:4]
+    if magic != 'HG':
+        raise util.Abort(_('not a Mercurial bundle'))
+    unbundlerclass = formatmap.get(version)
+    if unbundlerclass is None:
+        raise util.Abort(_('unknown bundle version %s') % version)
+    unbundler = unbundlerclass(ui, fp)
     ui.debug('start processing of %s stream\n' % header)
     return unbundler
 
@@ -615,6 +616,8 @@
     def compressed(self):
         return False
 
+formatmap = {'2Y': unbundle20}
+
 class bundlepart(object):
     """A bundle2 part contains application level payload