comparison mercurial/bundlerepo.py @ 33889:f672d060a931

bundlerepo: move bundle2 part handling out to a function This moves the bundle2 part handling for bundlerepo out to a separate function so extensions can participate in bundlerepo setup when using bundle2 bundles. Differential Revision: https://phab.mercurial-scm.org/D290
author Durham Goode <durham@fb.com>
date Wed, 23 Aug 2017 12:35:03 -0700
parents 891118dcd279
children 21fc747e1bc5
comparison
equal deleted inserted replaced
33888:891118dcd279 33889:f672d060a931
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-",