bundle2: capture transaction rollback message output (
issue4614)
The output from the transaction rollback was not included into the reply bundle.
It was eventually caught by the usual 'unbundle' output capture and sent to the
client but the result was out of order on the client side. We now capture the
output for the transaction release and transmit it the same way as all other
output.
We should probably rethink the whole output capture things but this would not be
appropriate for stable.
The is still multiple cases were output failed to be properly capture, they will
be fixed in later changesets.
--- a/mercurial/exchange.py Fri Apr 24 00:46:48 2015 +0100
+++ b/mercurial/exchange.py Thu Apr 23 14:20:36 2015 +0100
@@ -1284,6 +1284,7 @@
r = 0
# need a transaction when processing a bundle2 stream
wlock = lock = tr = None
+ recordout = None
try:
check_heads(repo, heads, 'uploading changes')
# push can proceed
@@ -1301,11 +1302,18 @@
except Exception, exc:
exc.duringunbundle2 = True
if r is not None:
- exc._bundle2salvagedoutput = r.salvageoutput()
+ parts = exc._bundle2salvagedoutput = r.salvageoutput()
+ repo.ui.pushbuffer(error=True)
+ def recordout(output):
+ part = bundle2.bundlepart('output', data=output,
+ mandatory=False)
+ parts.append(part)
raise
else:
lock = repo.lock()
r = changegroup.addchangegroup(repo, cg, source, url)
finally:
lockmod.release(tr, lock, wlock)
+ if recordout is not None:
+ recordout(repo.ui.popbuffer())
return r
--- a/tests/test-bundle2-exchange.t Fri Apr 24 00:46:48 2015 +0100
+++ b/tests/test-bundle2-exchange.t Thu Apr 23 14:20:36 2015 +0100
@@ -559,12 +559,12 @@
pushing to other
searching for changes
pre-close-tip:e7ec4e813ba6 draft
- transaction abort!
- rollback completed
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
+ remote: transaction abort!
+ remote: rollback completed
abort: pretxnclose.failpush hook exited with status 1
[255]
@@ -575,10 +575,10 @@
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
+ remote: transaction abort!
+ remote: rollback completed
abort: pretxnclose.failpush hook exited with status 1
remote: pre-close-tip:e7ec4e813ba6 draft
- remote: transaction abort!
- remote: rollback completed
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6
@@ -588,6 +588,8 @@
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
+ remote: transaction abort!
+ remote: rollback completed
abort: pretxnclose.failpush hook exited with status 1
[255]