281 self.tempfile = None |
281 self.tempfile = None |
282 f = util.posixfile(bundlename, "rb") |
282 f = util.posixfile(bundlename, "rb") |
283 self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename) |
283 self.bundlefile = self.bundle = exchange.readbundle(ui, f, bundlename) |
284 |
284 |
285 if isinstance(self.bundle, bundle2.unbundle20): |
285 if isinstance(self.bundle, bundle2.unbundle20): |
286 cgstream = None |
286 hadchangegroup = False |
287 for part in self.bundle.iterparts(): |
287 for part in self.bundle.iterparts(): |
288 if part.type == 'changegroup': |
288 if part.type == 'changegroup': |
289 if cgstream is not None: |
289 if hadchangegroup: |
290 raise NotImplementedError("can't process " |
290 raise NotImplementedError("can't process " |
291 "multiple changegroups") |
291 "multiple changegroups") |
292 cgstream = part |
292 hadchangegroup = True |
293 version = part.params.get('version', '01') |
293 |
294 legalcgvers = changegroup.supportedincomingversions(self) |
294 self._handlebundle2part(part) |
295 if version not in legalcgvers: |
295 |
296 msg = _('Unsupported changegroup version: %s') |
296 if not hadchangegroup: |
297 raise error.Abort(msg % version) |
297 raise error.Abort(_("No changegroups found")) |
298 if self.bundle.compressed(): |
|
299 cgstream = self._writetempbundle(part.read, |
|
300 ".cg%sun" % version) |
|
301 |
|
302 if cgstream is None: |
|
303 raise error.Abort(_('No changegroups found')) |
|
304 |
|
305 self.bundle = changegroup.getunbundler(version, cgstream, 'UN') |
|
306 |
298 |
307 elif self.bundle.compressed(): |
299 elif self.bundle.compressed(): |
308 f = self._writetempbundle(self.bundle.read, '.hg10un', |
300 f = self._writetempbundle(self.bundle.read, '.hg10un', |
309 header='HG10UN') |
301 header='HG10UN') |
310 self.bundlefile = self.bundle = exchange.readbundle(ui, f, |
302 self.bundlefile = self.bundle = exchange.readbundle(ui, f, |
315 self.bundlefilespos = {} |
307 self.bundlefilespos = {} |
316 |
308 |
317 self.firstnewrev = self.changelog.repotiprev + 1 |
309 self.firstnewrev = self.changelog.repotiprev + 1 |
318 phases.retractboundary(self, None, phases.draft, |
310 phases.retractboundary(self, None, phases.draft, |
319 [ctx.node() for ctx in self[self.firstnewrev:]]) |
311 [ctx.node() for ctx in self[self.firstnewrev:]]) |
|
312 |
|
313 def _handlebundle2part(self, part): |
|
314 if part.type == 'changegroup': |
|
315 cgstream = part |
|
316 version = part.params.get('version', '01') |
|
317 legalcgvers = changegroup.supportedincomingversions(self) |
|
318 if version not in legalcgvers: |
|
319 msg = _('Unsupported changegroup version: %s') |
|
320 raise error.Abort(msg % version) |
|
321 if self.bundle.compressed(): |
|
322 cgstream = self._writetempbundle(part.read, |
|
323 ".cg%sun" % version) |
|
324 |
|
325 self.bundle = changegroup.getunbundler(version, cgstream, 'UN') |
320 |
326 |
321 def _writetempbundle(self, readfn, suffix, header=''): |
327 def _writetempbundle(self, readfn, suffix, header=''): |
322 """Write a temporary file to disk |
328 """Write a temporary file to disk |
323 """ |
329 """ |
324 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", |
330 fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-", |