mercurial/bundle2.py
changeset 25321 b44ee346211f
parent 25320 697d8953b04d
child 25322 1f7c0403f8be
equal deleted inserted replaced
25320:697d8953b04d 25321:b44ee346211f
   481             yield param
   481             yield param
   482 
   482 
   483         outdebug(self.ui, 'start of parts')
   483         outdebug(self.ui, 'start of parts')
   484         for part in self._parts:
   484         for part in self._parts:
   485             outdebug(self.ui, 'bundle part: "%s"' % part.type)
   485             outdebug(self.ui, 'bundle part: "%s"' % part.type)
   486             for chunk in part.getchunks():
   486             for chunk in part.getchunks(ui=self.ui):
   487                 yield chunk
   487                 yield chunk
   488         outdebug(self.ui, 'end of bundle')
   488         outdebug(self.ui, 'end of bundle')
   489         yield _pack(_fpartheadersize, 0)
   489         yield _pack(_fpartheadersize, 0)
   490 
   490 
   491     def _paramchunk(self):
   491     def _paramchunk(self):
   724         if mandatory:
   724         if mandatory:
   725             params = self._mandatoryparams
   725             params = self._mandatoryparams
   726         params.append((name, value))
   726         params.append((name, value))
   727 
   727 
   728     # methods used to generates the bundle2 stream
   728     # methods used to generates the bundle2 stream
   729     def getchunks(self):
   729     def getchunks(self, ui):
   730         if self._generated is not None:
   730         if self._generated is not None:
   731             raise RuntimeError('part can only be consumed once')
   731             raise RuntimeError('part can only be consumed once')
   732         self._generated = False
   732         self._generated = False
   733         #### header
   733         #### header
   734         if self.mandatory:
   734         if self.mandatory:
   735             parttype = self.type.upper()
   735             parttype = self.type.upper()
   736         else:
   736         else:
   737             parttype = self.type.lower()
   737             parttype = self.type.lower()
       
   738         outdebug(ui, 'part %s: "%s"' % (self.id, parttype))
   738         ## parttype
   739         ## parttype
   739         header = [_pack(_fparttypesize, len(parttype)),
   740         header = [_pack(_fparttypesize, len(parttype)),
   740                   parttype, _pack(_fpartid, self.id),
   741                   parttype, _pack(_fpartid, self.id),
   741                  ]
   742                  ]
   742         ## parameters
   743         ## parameters
   761         for key, value in advpar:
   762         for key, value in advpar:
   762             header.append(key)
   763             header.append(key)
   763             header.append(value)
   764             header.append(value)
   764         ## finalize header
   765         ## finalize header
   765         headerchunk = ''.join(header)
   766         headerchunk = ''.join(header)
       
   767         outdebug(ui, 'header chunk size: %i' % len(headerchunk))
   766         yield _pack(_fpartheadersize, len(headerchunk))
   768         yield _pack(_fpartheadersize, len(headerchunk))
   767         yield headerchunk
   769         yield headerchunk
   768         ## payload
   770         ## payload
   769         try:
   771         try:
   770             for chunk in self._payloadchunks():
   772             for chunk in self._payloadchunks():
       
   773                 outdebug(ui, 'payload chunk size: %i' % len(chunk))
   771                 yield _pack(_fpayloadsize, len(chunk))
   774                 yield _pack(_fpayloadsize, len(chunk))
   772                 yield chunk
   775                 yield chunk
   773         except BaseException, exc:
   776         except BaseException, exc:
   774             # backup exception data for later
   777             # backup exception data for later
   775             exc_info = sys.exc_info()
   778             exc_info = sys.exc_info()
   776             msg = 'unexpected error: %s' % exc
   779             msg = 'unexpected error: %s' % exc
   777             interpart = bundlepart('error:abort', [('message', msg)],
   780             interpart = bundlepart('error:abort', [('message', msg)],
   778                                    mandatory=False)
   781                                    mandatory=False)
   779             interpart.id = 0
   782             interpart.id = 0
   780             yield _pack(_fpayloadsize, -1)
   783             yield _pack(_fpayloadsize, -1)
   781             for chunk in interpart.getchunks():
   784             for chunk in interpart.getchunks(ui=ui):
   782                 yield chunk
   785                 yield chunk
       
   786             outdebug(ui, 'closing payload chunk')
   783             # abort current part payload
   787             # abort current part payload
   784             yield _pack(_fpayloadsize, 0)
   788             yield _pack(_fpayloadsize, 0)
   785             raise exc_info[0], exc_info[1], exc_info[2]
   789             raise exc_info[0], exc_info[1], exc_info[2]
   786         # end of payload
   790         # end of payload
       
   791         outdebug(ui, 'closing payload chunk')
   787         yield _pack(_fpayloadsize, 0)
   792         yield _pack(_fpayloadsize, 0)
   788         self._generated = True
   793         self._generated = True
   789 
   794 
   790     def _payloadchunks(self):
   795     def _payloadchunks(self):
   791         """yield chunks of a the part payload
   796         """yield chunks of a the part payload