mercurial/bundlerepo.py
changeset 26803 ed41ce89822d
parent 26801 73bf76bf6f14
child 27751 a40e2f7fe49d
--- a/mercurial/bundlerepo.py	Fri Oct 02 23:21:39 2015 -0700
+++ b/mercurial/bundlerepo.py	Mon Oct 19 16:01:55 2015 +0200
@@ -277,22 +277,26 @@
         self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename)
 
         if isinstance(self.bundle, bundle2.unbundle20):
-            cgparts = [part for part in self.bundle.iterparts()
-                       if (part.type == 'changegroup')
-                       and (part.params.get('version', '01')
-                            in changegroup.packermap)]
+            cgstream = None
+            for part in self.bundle.iterparts():
+                if part.type == 'changegroup':
+                    if cgstream is not None:
+                        raise NotImplementedError("can't process "
+                                                  "multiple changegroups")
+                    cgstream = part
+                    version = part.params.get('version', '01')
+                    if version not in changegroup.packermap:
+                        msg = _('Unsupported changegroup version: %s')
+                        raise error.Abort(msg % version)
+                    if self.bundle.compressed():
+                        cgstream = _writetempbundle(part.read,
+                                                    ".cg%sun" % version)
 
-            if not cgparts:
+            if cgstream is None:
                 raise error.Abort('No changegroups found')
-            version = cgparts[0].params.get('version', '01')
-            cgparts = [p for p in cgparts
-                       if p.params.get('version', '01') == version]
-            if len(cgparts) > 1:
-                raise NotImplementedError("Can't process multiple changegroups")
-            part = cgparts[0]
+            cgstream.seek(0)
 
-            part.seek(0)
-            self.bundle = changegroup.packermap[version][1](part, 'UN')
+            self.bundle = changegroup.packermap[version][1](cgstream, 'UN')
 
         elif self.bundle.compressed():
             f = _writetempbundle(self.bundle.read, '.hg10un', header='HG10UN')