Mercurial > public > mercurial-scm > hg
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-", |