bundle2: make header reading optional
The `readbundle` function will consume the 4 first bytes to dispatch between
various unbundler. We introduce a way to inform `unbundle20` that the header
has been read and it can be trusted.
--- a/mercurial/bundle2.py Tue Apr 15 13:42:45 2014 -0400
+++ b/mercurial/bundle2.py Tue Apr 15 13:54:54 2014 -0400
@@ -399,15 +399,17 @@
(this will eventually yield parts)"""
- def __init__(self, ui, fp):
+ def __init__(self, ui, fp, header=None):
+ """If header is specified, we do not read it out of the stream."""
self.ui = ui
super(unbundle20, self).__init__(fp)
- header = self._readexact(4)
- magic, version = header[0:2], header[2:4]
- if magic != 'HG':
- raise util.Abort(_('not a Mercurial bundle'))
- if version != '20':
- raise util.Abort(_('unknown bundle version %s') % version)
+ if header is None:
+ header = self._readexact(4)
+ magic, version = header[0:2], header[2:4]
+ if magic != 'HG':
+ raise util.Abort(_('not a Mercurial bundle'))
+ if version != '20':
+ raise util.Abort(_('unknown bundle version %s') % version)
self.ui.debug('start processing of %s stream\n' % header)
@util.propertycache