diff --git a/mercurial/exchange.py b/mercurial/exchange.py
index c93bb6a08fa1e9bba6e3b38a368c5961b77f0ebe_bWVyY3VyaWFsL2V4Y2hhbmdlLnB5..dda41da069a49b7dc68b7fe8d01c3b58ba315ff6_bWVyY3VyaWFsL2V4Y2hhbmdlLnB5 100644
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -601,9 +601,11 @@
     # 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():