Comments
Patch
@@ -288,18 +288,26 @@
self._bundlefile = bundle
self._cgunpacker = None
- hadchangegroup = False
+ cgpart = None
for part in bundle.iterparts():
if part.type == 'changegroup':
- if hadchangegroup:
+ if cgpart:
raise NotImplementedError("can't process "
"multiple changegroups")
- hadchangegroup = True
+ cgpart = part
self._handlebundle2part(bundle, part)
- if not hadchangegroup:
+ if not cgpart:
raise error.Abort(_("No changegroups found"))
+
+ # This is required to placate a later consumer, which expects
+ # the payload offset to be at the beginning of the changegroup.
+ # We need to do this after the iterparts() generator advances
+ # because iterparts() will seek to end of payload after the
+ # generator returns control to iterparts().
+ cgpart.seek(0, os.SEEK_SET)
+
elif isinstance(bundle, changegroup.cg1unpacker):
if bundle.compressed():
f = self._writetempbundle(bundle.read, '.hg10un',
@@ -859,9 +859,7 @@
# Ensure part is fully consumed so we can start reading the next
# part.
part.consume()
- # But then seek back to the beginning so the code consuming this
- # generator has a part that starts at 0.
- part.seek(0, os.SEEK_SET)
+
headerblock = self._readpartheader()
indebug(self.ui, 'end of bundle2 stream')