diff mercurial/exchange.py @ 24851:df0ce98c882f stable

bundle2: also save output when error happens during part processing Until this changeset, we were only able to save output if an error happened during the 'transaction.close()' phase. If the 'processbundle' call raised an exception, the 'bundleoperation' object was never returned, so the reply bundle was never accessible and no output could be salvaged. We introduce a quick (but not very elegant) fix to gain access to any reply created during the processing. This conclude this output related series. We should hopefully be able client-side to see the whole server output, in a proper order. The code is now complex enough that a refactoring of it would make sense on default.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Thu, 23 Apr 2015 16:36:18 +0100
parents 6b81309d15a7
children e530cde6d115
line wrap: on
line diff
--- a/mercurial/exchange.py	Thu Apr 23 14:54:45 2015 +0100
+++ b/mercurial/exchange.py	Thu Apr 23 16:36:18 2015 +0100
@@ -1297,11 +1297,15 @@
                 tr.hookargs['source'] = source
                 tr.hookargs['url'] = url
                 tr.hookargs['bundle2'] = '1'
-                r = bundle2.processbundle(repo, cg, lambda: tr).reply
-                if r is not None:
-                    repo.ui.pushbuffer(error=True, subproc=True)
-                    def recordout(output):
-                        r.newpart('output', data=output, mandatory=False)
+                op = bundle2.bundleoperation(repo, lambda: tr)
+                try:
+                    r = bundle2.processbundle(repo, cg, op=op)
+                finally:
+                    r = op.reply
+                    if r is not None:
+                        repo.ui.pushbuffer(error=True, subproc=True)
+                        def recordout(output):
+                            r.newpart('output', data=output, mandatory=False)
                 tr.close()
             except Exception, exc:
                 exc.duringunbundle2 = True