equal
deleted
inserted
replaced
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 |