D289: bundle2: seek part back during iteration

durham (Durham Goode) phabricator at mercurial-scm.org
Wed Aug 9 00:05:55 UTC 2017


durham created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Previously, iterparts would yield the part to users, then consume the part. This
  changed the part after the user was given it and left it at the end, both of
  which seem unexpected.  Let's seek back to the beginning after we've consumed
  it. I tried not seeking to the end at all, but that seems important for the
  overall bundle2 consumption.
  
  This is used in a future patch to let us move the bundlerepo
  bundle2-changegroup-part to be handled entirely within the for loop, instead of
  having to do a seek back to 0 after the entire loop finishes.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D289

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
@@ -301,7 +301,6 @@
 
             if cgstream is None:
                 raise error.Abort(_('No changegroups found'))
-            cgstream.seek(0)
 
             self.bundle = changegroup.getunbundler(version, cgstream, 'UN')
 
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -805,7 +805,11 @@
         while headerblock is not None:
             part = unbundlepart(self.ui, headerblock, self._fp)
             yield part
+            # Seek to the end of the part to force it's consumption so the next
+            # part can be read. But then seek back to the beginning so the
+            # code consuming this generator has a part that starts at 0.
             part.seek(0, 2)
+            part.seek(0)
             headerblock = self._readpartheader()
         indebug(self.ui, 'end of bundle2 stream')
 



To: durham, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list