[PATCH 2 of 4 V2] bundle2: support unbundling empty part
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri Mar 28 13:20:53 CDT 2014
On 03/28/2014 11:10 AM, David Soria Parra wrote:
> pierre-yves.david at ens-lyon.org writes:
>
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at fb.com>
>> # Date 1395295443 25200
>> # Wed Mar 19 23:04:03 2014 -0700
>> # Node ID e7c977d822a8c7921510c034e250ed52233fff41
>> # Parent f5be6f95d76a9369b441da680cf2a3dd959da1f7
>> bundle2: support unbundling empty part
>>
>> We augment the unbundler to make it able to unbundle the empty part we are now
>> able to bundle.
>>
>> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
>> --- a/mercurial/bundle2.py
>> +++ b/mercurial/bundle2.py
>> @@ -238,23 +238,44 @@ class unbundle20(object):
>> part = self._readpart()
>> self.ui.debug('end of bundle2 stream\n')
>>
>> def _readpart(self):
>> """return None when an end of stream markers is reach"""
>> - headersize = self._readexact(2)
>> - assert headersize == '\0\0'
>> - return None
>> +
>> + headersize = self._unpack(_fpartheadersize)[0]
>> + self.ui.debug('part header size: %i\n' % headersize)
>> + if not headersize:
>> + return None
>> + headerblock = self._readexact(headersize)
>> + # some utility to help reading from the header bloc
>
> bloc -> block
>
>> + def fromheader(size, _offset=[0]):
>> + """return the next <size> byte from the header"""
>> + offset = _offset[0] #small hack to make this mutable
>> + data = headerblock[offset:(offset + size)]
>> + _offset[0] = offset + size
>> + return data
>
> It might be just me, but I think this is a bit hacky and hard to follow.
> Can we either return the offset with data and just pass it around like
>
> return data, offset+size
>
> and
>
> typesize, offset = fromheader(1)
> next, offset = fromheader(1, offset)
>
> or use a variable defined just before fromheader? Maybe yoru approach is
> a python standard and we should keep it, but i had to read twice to
> follow what it's actually doing.
In a prior version, _offset was defined right before fromheader. I
decided to move it in the function parameter to make it clear is was
used only here. (basically a static variable with for this unbundling.)
The result of from header is other directly fed to unpack so I'm not
keen to use the first proposal (return data, newoffset).
--
Pierre-Yves
More information about the Mercurial-devel
mailing list