Comments
Patch
@@ -143,10 +143,11 @@ process is aborted, the full bundle is s
channel usable. But none of the part read from an abort are processed. In the
future, dropping the stream may become an option for channel we do not care to
preserve.
"""
+import sys
import util
import struct
import urllib
import string
import obsolete
@@ -670,13 +671,26 @@ class bundlepart(object):
## finalize header
headerchunk = ''.join(header)
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:
+ # 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
def _payloadchunks(self):
@@ -775,28 +775,25 @@ with reply
added 0 changesets with 0 changes to 3 files
\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
Check handling of exception during generation.
----------------------------------------------
-(is currently not right)
$ hg bundle2 --genraise > ../genfailed.hg2
abort: Someone set up us the bomb!
[255]
Should still be a valid bundle
-(is currently not right)
$ cat ../genfailed.hg2
HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
- b2x:output\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
+ b2x:output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00L\x0fb2x:error:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set us up the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
And its handling on the other size raise a clean exception
-(is currently not right)
$ cat ../genfailed.hg2 | hg unbundle2
0 unread bytes
- abort: stream ended unexpectedly (got 0 bytes, expected 4)
+ abort: unexpected error: Someone set us up the bomb!
[255]
$ cd ..