# HG changeset patch # User Pierre-Yves David # Date 1445263315 -7200 # Node ID ed41ce89822d4b6c7875ffe63f96fa260752f230 # Parent 42f705f2c02dc6ae4f01b5c1d3f773dda4149ed9 bundlerepo: properly extract compressed changegroup from bundle2 Before this bundle repository were unable to work with compressed bundle2. We use the same approach as with bundle1, we extract the changegroup in uncompressed form into a temporary file. diff -r 42f705f2c02d -r ed41ce89822d mercurial/bundlerepo.py --- 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')