mercurial/bundle2.py
changeset 30353 d045b4091197
parent 30351 f81002f736d7
child 30357 5925bda42dbd
equal deleted inserted replaced
30352:75f5beb54e29 30353:d045b4091197
   679     _magicstring = 'HG20'
   679     _magicstring = 'HG20'
   680 
   680 
   681     def __init__(self, ui, fp):
   681     def __init__(self, ui, fp):
   682         """If header is specified, we do not read it out of the stream."""
   682         """If header is specified, we do not read it out of the stream."""
   683         self.ui = ui
   683         self.ui = ui
   684         self._decompressor = util.decompressors[None]
   684         self._compengine = util.compengines.forbundletype('UN')
   685         self._compressed = None
   685         self._compressed = None
   686         super(unbundle20, self).__init__(fp)
   686         super(unbundle20, self).__init__(fp)
   687 
   687 
   688     @util.propertycache
   688     @util.propertycache
   689     def params(self):
   689     def params(self):
   753         yield _pack(_fstreamparamsize, paramssize)
   753         yield _pack(_fstreamparamsize, paramssize)
   754         if paramssize:
   754         if paramssize:
   755             params = self._readexact(paramssize)
   755             params = self._readexact(paramssize)
   756             self._processallparams(params)
   756             self._processallparams(params)
   757             yield params
   757             yield params
   758             assert self._decompressor is util.decompressors[None]
   758             assert self._compengine.bundletype == 'UN'
   759         # From there, payload might need to be decompressed
   759         # From there, payload might need to be decompressed
   760         self._fp = self._decompressor(self._fp)
   760         self._fp = self._compengine.decompressorreader(self._fp)
   761         emptycount = 0
   761         emptycount = 0
   762         while emptycount < 2:
   762         while emptycount < 2:
   763             # so we can brainlessly loop
   763             # so we can brainlessly loop
   764             assert _fpartheadersize == _fpayloadsize
   764             assert _fpartheadersize == _fpayloadsize
   765             size = self._unpack(_fpartheadersize)[0]
   765             size = self._unpack(_fpartheadersize)[0]
   779     def iterparts(self):
   779     def iterparts(self):
   780         """yield all parts contained in the stream"""
   780         """yield all parts contained in the stream"""
   781         # make sure param have been loaded
   781         # make sure param have been loaded
   782         self.params
   782         self.params
   783         # From there, payload need to be decompressed
   783         # From there, payload need to be decompressed
   784         self._fp = self._decompressor(self._fp)
   784         self._fp = self._compengine.decompressorreader(self._fp)
   785         indebug(self.ui, 'start extraction of bundle2 parts')
   785         indebug(self.ui, 'start extraction of bundle2 parts')
   786         headerblock = self._readpartheader()
   786         headerblock = self._readpartheader()
   787         while headerblock is not None:
   787         while headerblock is not None:
   788             part = unbundlepart(self.ui, headerblock, self._fp)
   788             part = unbundlepart(self.ui, headerblock, self._fp)
   789             yield part
   789             yield part
   821     return decorator
   821     return decorator
   822 
   822 
   823 @b2streamparamhandler('compression')
   823 @b2streamparamhandler('compression')
   824 def processcompression(unbundler, param, value):
   824 def processcompression(unbundler, param, value):
   825     """read compression parameter and install payload decompression"""
   825     """read compression parameter and install payload decompression"""
   826     if value not in util.decompressors:
   826     if value not in util.compengines.supportedbundletypes:
   827         raise error.BundleUnknownFeatureError(params=(param,),
   827         raise error.BundleUnknownFeatureError(params=(param,),
   828                                               values=(value,))
   828                                               values=(value,))
   829     unbundler._decompressor = util.decompressors[value]
   829     unbundler._compengine = util.compengines.forbundletype(value)
   830     if value is not None:
   830     if value is not None:
   831         unbundler._compressed = True
   831         unbundler._compressed = True
   832 
   832 
   833 class bundlepart(object):
   833 class bundlepart(object):
   834     """A bundle2 part contains application level payload
   834     """A bundle2 part contains application level payload