Show More
@@ -285,7 +285,7 b' def _notransaction():' | |||||
285 | to be created""" |
|
285 | to be created""" | |
286 | raise TransactionUnavailable() |
|
286 | raise TransactionUnavailable() | |
287 |
|
287 | |||
288 | def processbundle(repo, unbundler, transactiongetter=None): |
|
288 | def processbundle(repo, unbundler, transactiongetter=None, op=None): | |
289 | """This function process a bundle, apply effect to/from a repo |
|
289 | """This function process a bundle, apply effect to/from a repo | |
290 |
|
290 | |||
291 | It iterates over each part then searches for and uses the proper handling |
|
291 | It iterates over each part then searches for and uses the proper handling | |
@@ -295,10 +295,16 b' def processbundle(repo, unbundler, trans' | |||||
295 | before final usage. |
|
295 | before final usage. | |
296 |
|
296 | |||
297 | Unknown Mandatory part will abort the process. |
|
297 | Unknown Mandatory part will abort the process. | |
|
298 | ||||
|
299 | It is temporarily possible to provide a prebuilt bundleoperation to the | |||
|
300 | function. This is used to ensure output is properly propagated in case of | |||
|
301 | an error during the unbundling. This output capturing part will likely be | |||
|
302 | reworked and this ability will probably go away in the process. | |||
298 | """ |
|
303 | """ | |
299 |
if |
|
304 | if op is None: | |
300 |
transactiongetter |
|
305 | if transactiongetter is None: | |
301 | op = bundleoperation(repo, transactiongetter) |
|
306 | transactiongetter = _notransaction | |
|
307 | op = bundleoperation(repo, transactiongetter) | |||
302 | # todo: |
|
308 | # todo: | |
303 | # - replace this is a init function soon. |
|
309 | # - replace this is a init function soon. | |
304 | # - exception catching |
|
310 | # - exception catching |
@@ -1297,11 +1297,15 b' def unbundle(repo, cg, heads, source, ur' | |||||
1297 | tr.hookargs['source'] = source |
|
1297 | tr.hookargs['source'] = source | |
1298 | tr.hookargs['url'] = url |
|
1298 | tr.hookargs['url'] = url | |
1299 | tr.hookargs['bundle2'] = '1' |
|
1299 | tr.hookargs['bundle2'] = '1' | |
1300 |
|
|
1300 | op = bundle2.bundleoperation(repo, lambda: tr) | |
1301 |
|
|
1301 | try: | |
1302 | repo.ui.pushbuffer(error=True, subproc=True) |
|
1302 | r = bundle2.processbundle(repo, cg, op=op) | |
1303 | def recordout(output): |
|
1303 | finally: | |
1304 | r.newpart('output', data=output, mandatory=False) |
|
1304 | r = op.reply | |
|
1305 | if r is not None: | |||
|
1306 | repo.ui.pushbuffer(error=True, subproc=True) | |||
|
1307 | def recordout(output): | |||
|
1308 | r.newpart('output', data=output, mandatory=False) | |||
1305 | tr.close() |
|
1309 | tr.close() | |
1306 | except Exception, exc: |
|
1310 | except Exception, exc: | |
1307 | exc.duringunbundle2 = True |
|
1311 | exc.duringunbundle2 = True |
@@ -619,3 +619,51 b' Doing the actual push: hook abort' | |||||
619 | $ ls -1 other/.hg/store/00changelog.i* |
|
619 | $ ls -1 other/.hg/store/00changelog.i* | |
620 | other/.hg/store/00changelog.i |
|
620 | other/.hg/store/00changelog.i | |
621 |
|
621 | |||
|
622 | Check error from hook during the unbundling process itself | |||
|
623 | ||||
|
624 | $ cat << EOF >> $HGRCPATH | |||
|
625 | > pretxnchangegroup = echo "Fail early!"; false | |||
|
626 | > EOF | |||
|
627 | $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS # reload http config | |||
|
628 | $ hg -R other serve -p $HGPORT2 -d --pid-file=other.pid -E other-error.log | |||
|
629 | $ cat other.pid >> $DAEMON_PIDS | |||
|
630 | ||||
|
631 | $ hg -R main push other -r e7ec4e813ba6 | |||
|
632 | pushing to other | |||
|
633 | searching for changes | |||
|
634 | remote: adding changesets | |||
|
635 | remote: adding manifests | |||
|
636 | remote: adding file changes | |||
|
637 | remote: added 1 changesets with 1 changes to 1 files | |||
|
638 | remote: Fail early! | |||
|
639 | remote: transaction abort! | |||
|
640 | remote: Cleaning up the mess... | |||
|
641 | remote: rollback completed | |||
|
642 | abort: pretxnchangegroup hook exited with status 1 | |||
|
643 | [255] | |||
|
644 | $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6 | |||
|
645 | pushing to ssh://user@dummy/other | |||
|
646 | searching for changes | |||
|
647 | remote: adding changesets | |||
|
648 | remote: adding manifests | |||
|
649 | remote: adding file changes | |||
|
650 | remote: added 1 changesets with 1 changes to 1 files | |||
|
651 | remote: Fail early! | |||
|
652 | remote: transaction abort! | |||
|
653 | remote: Cleaning up the mess... | |||
|
654 | remote: rollback completed | |||
|
655 | abort: pretxnchangegroup hook exited with status 1 | |||
|
656 | [255] | |||
|
657 | $ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6 | |||
|
658 | pushing to http://localhost:$HGPORT2/ | |||
|
659 | searching for changes | |||
|
660 | remote: adding changesets | |||
|
661 | remote: adding manifests | |||
|
662 | remote: adding file changes | |||
|
663 | remote: added 1 changesets with 1 changes to 1 files | |||
|
664 | remote: Fail early! | |||
|
665 | remote: transaction abort! | |||
|
666 | remote: Cleaning up the mess... | |||
|
667 | remote: rollback completed | |||
|
668 | abort: pretxnchangegroup hook exited with status 1 | |||
|
669 | [255] |
General Comments 0
You need to be logged in to leave comments.
Login now