hooks: add a 'txnabort' hook

This hook will be called whenever a transaction is aborted. This will make it
easy for people to clean up temporary content they may have created during a
transaction.
This commit is contained in:
Pierre-Yves David 2015-04-16 05:36:49 -04:00
parent ce7797818b
commit bfdd8d2ada
3 changed files with 12 additions and 0 deletions

View File

@ -833,6 +833,10 @@ variables it is passed are listed with names of the form ``$HG_foo``.
after the lock is released. see ``pretxnclose`` docs for details about
available variables.
``txnabort``
Run when a transaction is aborted. see ``pretxnclose`` docs for details about
available variables.
``pretxnchangegroup``
Run after a changegroup has been added via push, pull or unbundle,
but before the transaction has been committed. Changegroup is

View File

@ -975,6 +975,12 @@ class localrepository(object):
**tr2.hookargs)
reporef()._afterlock(hook)
tr.addfinalize('txnclose-hook', txnclosehook)
def txnaborthook(tr2):
"""To be run if transaction is aborted
"""
reporef().hook('txnabort', throw=False, txnname=desc,
**tr2.hookargs)
tr.addabort('txnabort-hook', txnaborthook)
self._transref = weakref.ref(tr)
return tr

View File

@ -15,6 +15,7 @@ commit hooks can see env vars
> pretxnopen = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" pretxnopen"
> pretxnclose = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" pretxnclose"
> txnclose = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" txnclose"
> txnabort = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" txnabort"
> EOF
$ echo a > a
$ hg add a
@ -161,6 +162,7 @@ more there after
5:6f611f8018c1
pretxncommit.forbid hook: HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a
transaction abort!
txnabort hook: HG_TXNID=TXN:* HG_TXNNAME=commit (glob)
rollback completed
abort: pretxncommit.forbid1 hook exited with status 1
[255]