mercurial/bundle2.py
branchstable
changeset 23067 420a051616ce
parent 23066 ad144882318d
child 23139 e53f6b72a0e4
--- a/mercurial/bundle2.py	Tue Oct 14 10:47:47 2014 -0700
+++ b/mercurial/bundle2.py	Wed Oct 15 03:52:20 2014 -0700
@@ -145,6 +145,7 @@
 preserve.
 """
 
+import sys
 import util
 import struct
 import urllib
@@ -673,9 +674,22 @@
         yield _pack(_fpartheadersize, len(headerchunk))
         yield headerchunk
         ## payload
-        for chunk in self._payloadchunks():
-            yield _pack(_fpayloadsize, len(chunk))
-            yield chunk
+        try:
+            for chunk in self._payloadchunks():
+                yield _pack(_fpayloadsize, len(chunk))
+                yield chunk
+        except Exception, exc:
+            # backup exception data for later
+            exc_info = sys.exc_info()
+            msg = 'unexpected error: %s' % exc
+            interpart = bundlepart('b2x:error:abort', [('message', msg)])
+            interpart.id = 0
+            yield _pack(_fpayloadsize, -1)
+            for chunk in interpart.getchunks():
+                yield chunk
+            # abort current part payload
+            yield _pack(_fpayloadsize, 0)
+            raise exc_info[0], exc_info[1], exc_info[2]
         # end of payload
         yield _pack(_fpayloadsize, 0)
         self._generated = True