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.
--- a/mercurial/help/config.txt Thu Apr 16 05:41:07 2015 -0400
+++ b/mercurial/help/config.txt Thu Apr 16 05:36:49 2015 -0400
@@ -833,6 +833,10 @@
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
--- a/mercurial/localrepo.py Thu Apr 16 05:41:07 2015 -0400
+++ b/mercurial/localrepo.py Thu Apr 16 05:36:49 2015 -0400
@@ -975,6 +975,12 @@
**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
--- a/tests/test-hook.t Thu Apr 16 05:41:07 2015 -0400
+++ b/tests/test-hook.t Thu Apr 16 05:36:49 2015 -0400
@@ -15,6 +15,7 @@
> 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 @@
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]