[PATCH 1 of 4 reviewed by Augie] bundle2: lazily generate the changegroup part in exchange.getbundle

pierre-yves.david at ens-lyon.org pierre-yves.david at ens-lyon.org
Sat Apr 12 16:27:19 CDT 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1397329015 14400
#      Sat Apr 12 14:56:55 2014 -0400
# Node ID dda41da069a49b7dc68b7fe8d01c3b58ba315ff6
# Parent  c93bb6a08fa1e9bba6e3b38a368c5961b77f0ebe
bundle2: lazily generate the changegroup part in exchange.getbundle

Now that we have lazy generation of parts, let's use it.

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -599,13 +599,15 @@ def getbundle(repo, source, heads=None, 
     if bundlecaps is None or 'HG20' not in bundlecaps:
         return cg
     # very crude first implementation,
     # the bundle API will change and the generation will be done lazily.
     bundler = bundle2.bundle20(repo.ui)
-    tempname = changegroup.writebundle(cg, None, 'HG10UN')
-    data = open(tempname).read()
-    part = bundle2.part('changegroup', data=data)
+    def cgchunks(cg=cg):
+        yield 'HG10UN'
+        for c in cg.getchunks():
+            yield c
+    part = bundle2.part('changegroup', data=cgchunks())
     bundler.addpart(part)
     temp = cStringIO.StringIO()
     for c in bundler.getchunks():
         temp.write(c)
     temp.seek(0)


More information about the Mercurial-devel mailing list