evolve: install progress support for the bundle2 push path
authorPierre-Yves David <pierre-yves.david@fb.com>
Tue, 20 May 2014 17:21:36 -0700
changeset 961 8de88b323fb6
parent 960 0c1142059a82
child 962 d04a52f40f41
evolve: install progress support for the bundle2 push path The custom wireprotocol command had a trick to display progress while pushing. We reinstall such logic for the new path using bundle2.
hgext/evolve.py
--- a/hgext/evolve.py	Tue May 20 14:39:13 2014 -0700
+++ b/hgext/evolve.py	Tue May 20 17:21:36 2014 -0700
@@ -2247,6 +2247,12 @@
                          total=self.length)
         return StringIO.read(self, size)
 
+    def __iter__(self):
+        d = self.read(4096)
+        while d:
+            yield d
+            d = self.read(4096)
+
 
 
 @eh.wrapfunction(exchange, '_pushobsolete')
@@ -2278,15 +2284,16 @@
         if not markers:
             repo.ui.status("OBSEXC: no marker to push\n")
         elif remote.capable('_evoext_b2x_obsmarkers_0'):
-            obsdata = StringIO()
+            obsdata = pushobsmarkerStringIO()
             _encodemarkersstream(obsdata, markers)
             obsdata.seek(0)
+            obsdata.ui = repo.ui
             repo.ui.status("OBSEXC: pushing %i markers (%i bytes)\n"
                            % (len(markers), len(obsdata.getvalue())))
             bundler = bundle2.bundle20(pushop.ui, {})
             capsblob = bundle2.encodecaps(pushop.repo.bundle2caps)
             bundler.addpart(bundle2.bundlepart('b2x:replycaps', data=capsblob))
-            cgpart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata.getvalue())
+            cgpart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata)
             bundler.addpart(cgpart)
             stream = util.chunkbuffer(bundler.getchunks())
             try:
@@ -2297,6 +2304,7 @@
                 op = bundle2.processbundle(pushop.repo, reply)
             except bundle2.UnknownPartError, exc:
                 raise util.Abort('missing support for %s' % exc)
+            repo.ui.progress('OBSEXC', None)
         elif remote.capable('_evoext_pushobsmarkers_0'):
             obsdata = pushobsmarkerStringIO()
             _encodemarkersstream(obsdata, markers)