D1389: bundle2: only seek to beginning of part in bundlerepo
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Mon Nov 20 18:50:21 EST 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG2b72bc88043f: bundle2: only seek to beginning of part in bundlerepo (authored by indygreg, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D1389?vs=3467&id=3693
REVISION DETAIL
https://phab.mercurial-scm.org/D1389
AFFECTED FILES
mercurial/bundle2.py
mercurial/bundlerepo.py
CHANGE DETAILS
diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py
+++ b/mercurial/bundlerepo.py
@@ -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',
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -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')
To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list