Mercurial > public > mercurial-scm > hg-stable
diff mercurial/bundle2.py @ 21605:f9dabfceb259
bundle2: introduce a ``addparam`` method on part
We make it easier to add new parameters after the part creation. As for the
``data`` attribute we make sure the part generation has not begun yet.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 22 May 2014 11:38:40 -0700 |
parents | c399bf961cb9 |
children | e55888447958 |
line wrap: on
line diff
--- a/mercurial/bundle2.py Thu May 22 11:21:26 2014 -0700 +++ b/mercurial/bundle2.py Thu May 22 11:38:40 2014 -0700 @@ -556,8 +556,13 @@ handler. The part payload is contained in ``part.data``. It could be raw bytes or a - generator of byte chunks. The data attribute cannot be modified after the - generation has begun. + generator of byte chunks. + + You can add parameters to the part using the ``addparam`` method. + Parameters can be either mandatory (default) or advisory. Remote side + should be able to safely ignore the advisory ones. + + Both data and parameters cannot be modified after the generation has begun. """ def __init__(self, parttype, mandatoryparams=(), advisoryparams=(), @@ -565,8 +570,8 @@ self.id = None self.type = parttype self._data = data - self.mandatoryparams = mandatoryparams - self.advisoryparams = advisoryparams + self._mandatoryparams = list(mandatoryparams) + self._advisoryparams = list(advisoryparams) # status of the part's generation: # - None: not started, # - False: currently generated, @@ -582,6 +587,24 @@ return self._data data = property(__getdata, __setdata) + @property + def mandatoryparams(self): + # make it an immutable tuple to force people through ``addparam`` + return tuple(self._mandatoryparams) + + @property + def advisoryparams(self): + # make it an immutable tuple to force people through ``addparam`` + return tuple(self._advisoryparams) + + def addparam(self, name, value='', mandatory=True): + if self._generated is not None: + raise ReadOnlyPartError('part is being generated') + params = self._advisoryparams + if mandatory: + params = self._mandatoryparams + params.append((name, value)) + # methods used to generates the bundle2 stream def getchunks(self): if self._generated is not None: