mercurial/bundlerepo.py
changeset 50200 197204dba8a2
parent 50199 21f876895dfe
child 50201 149f09ffef46
equal deleted inserted replaced
50199:21f876895dfe 50200:197204dba8a2
   300         if isinstance(bundle, bundle2.unbundle20):
   300         if isinstance(bundle, bundle2.unbundle20):
   301             self._bundlefile = bundle
   301             self._bundlefile = bundle
   302 
   302 
   303             cgpart = None
   303             cgpart = None
   304             for part in bundle.iterparts(seekable=True):
   304             for part in bundle.iterparts(seekable=True):
   305                 if part.type == b'changegroup':
   305                 if part.type == b'phase-heads':
       
   306                     self._handle_bundle2_phase_part(bundle, part)
       
   307                 elif part.type == b'changegroup':
   306                     if cgpart:
   308                     if cgpart:
   307                         raise NotImplementedError(
   309                         raise NotImplementedError(
   308                             b"can't process multiple changegroups"
   310                             b"can't process multiple changegroups"
   309                         )
   311                         )
   310                     cgpart = part
   312                     cgpart = part
   344         )
   346         )
   345 
   347 
   346     def _handle_bundle2_cg_part(self, bundle, part):
   348     def _handle_bundle2_cg_part(self, bundle, part):
   347         assert part.type == b'changegroup'
   349         assert part.type == b'changegroup'
   348         cgstream = part
   350         cgstream = part
       
   351         targetphase = part.params.get(b'targetphase')
       
   352         try:
       
   353             targetphase = int(targetphase)
       
   354         except TypeError:
       
   355             pass
       
   356         if targetphase is None:
       
   357             targetphase = phases.draft
       
   358         if targetphase not in phases.allphases:
       
   359             m = _(b'unsupported targetphase: %d')
       
   360             m %= targetphase
       
   361             raise error.Abort(m)
   349         version = part.params.get(b'version', b'01')
   362         version = part.params.get(b'version', b'01')
   350         legalcgvers = changegroup.supportedincomingversions(self)
   363         legalcgvers = changegroup.supportedincomingversions(self)
   351         if version not in legalcgvers:
   364         if version not in legalcgvers:
   352             msg = _(b'Unsupported changegroup version: %s')
   365             msg = _(b'Unsupported changegroup version: %s')
   353             raise error.Abort(msg % version)
   366             raise error.Abort(msg % version)
   358 
   371 
   359         self.firstnewrev = self.changelog.repotiprev + 1
   372         self.firstnewrev = self.changelog.repotiprev + 1
   360         phases.retractboundary(
   373         phases.retractboundary(
   361             self,
   374             self,
   362             None,
   375             None,
   363             phases.draft,
   376             targetphase,
   364             [ctx.node() for ctx in self[self.firstnewrev :]],
   377             [ctx.node() for ctx in self[self.firstnewrev :]],
   365         )
   378         )
       
   379 
       
   380     def _handle_bundle2_phase_part(self, bundle, part):
       
   381         assert part.type == b'phase-heads'
       
   382 
       
   383         unfi = self.unfiltered()
       
   384         headsbyphase = phases.binarydecode(part)
       
   385         phases.updatephases(unfi, lambda: None, headsbyphase)
   366 
   386 
   367     def _writetempbundle(self, readfn, suffix, header=b''):
   387     def _writetempbundle(self, readfn, suffix, header=b''):
   368         """Write a temporary file to disk"""
   388         """Write a temporary file to disk"""
   369         fdtemp, temp = self.vfs.mkstemp(prefix=b"hg-bundle-", suffix=suffix)
   389         fdtemp, temp = self.vfs.mkstemp(prefix=b"hg-bundle-", suffix=suffix)
   370         self.tempfile = temp
   390         self.tempfile = temp