changeset 962:d04a52f40f41

evolve: install progress support for the bundle2 pull path The custom wireprotocol command had a trick to display progress while pulling. We reinstall such logic for the new path using bundle2. Its notable that we are using the bundle2 advisory parameter for this purpose.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Tue, 20 May 2014 22:36:47 -0700
parents 8de88b323fb6
children f80e8e3c3726
files hgext/evolve.py
diffstat 1 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/evolve.py	Tue May 20 17:21:36 2014 -0700
+++ b/hgext/evolve.py	Tue May 20 22:36:47 2014 -0700
@@ -2382,7 +2382,22 @@
 def handleobsmarkerv1(op, inpart):
     """add a stream of obsmarker to the repo"""
     tr = op.gettransaction()
-    obsdata = inpart.read()
+    advparams = dict(inpart.advisoryparams)
+    length = advparams.get('totalbytes')
+    if length is None:
+        obsdata = inpart.read()
+    else:
+        length = int(length)
+        data = StringIO()
+        current = 0
+        op.ui.progress('OBSEXC', current, unit="bytes", total=length)
+        while current < length:
+            readsize = min(length-current, 4096)
+            data.write(inpart.read(readsize))
+            current += readsize
+            op.ui.progress('OBSEXC', current, unit="bytes", total=length)
+        op.ui.progress('OBSEXC', None)
+        obsdata = data.getvalue()
     totalsize = len(obsdata)
     old = len(op.repo.obsstore._all)
     op.repo.obsstore.mergemarkers(tr, obsdata)
@@ -2429,7 +2444,10 @@
         heads = wireproto.decodelist(heads)
         obsdata = _getobsmarkersstream(repo, common=common, heads=heads)
         if len(obsdata.getvalue()) > 5:
-            obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata)
+            advparams = [('totalbytes', str(len(obsdata.getvalue())))]
+            obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1',
+                                         advisoryparams=advparams,
+                                         data=obsdata)
             bundler.addpart(obspart)
     orig(bundler, repo, source)