Mercurial > public > mercurial-scm > hg-stable
diff tests/test-mq-qrefresh-replace-log-message.t @ 26751:520defbc0335
hook: centralize passing HG_PENDING to external hook process
This patch centralizes passing HG_PENDING to external hook process
into '_exthook()'. To make in-memory changes visible to external hook
process, this patch does:
- write (or schedule to write) in-memory dirstate changes, and
- set HG_PENDING environment variable, if:
- a transaction is running, and
- there are in-memory changes to be visible
This patch tests some commands with some hooks, because transaction
activity of a same hook differs from each other ("---": "not tested").
======== ========= ========= ============
command preupdate precommit pretxncommit
======== ========= ========= ============
unshelve o --- ---
backout x --- ---
import --- o o
qrefresh --- x o
======== ========= ========= ============
Each hooks are examined separately to prevent in-memory changes from
being visible to external process accidentally by side effect of hooks
previously invoked.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 17 Oct 2015 01:15:34 +0900 |
parents | 9f9ec4abe700 |
children | bbf544b5f2e9 |
line wrap: on
line diff
--- a/tests/test-mq-qrefresh-replace-log-message.t Sat Oct 17 01:15:34 2015 +0900 +++ b/tests/test-mq-qrefresh-replace-log-message.t Sat Oct 17 01:15:34 2015 +0900 @@ -242,3 +242,85 @@ ==== 0:25e397dabed2 ==== + +== test visibility to precommit external hook + + $ hg update -C -q + $ rm -f file2 + $ hg qpush -q second-patch --config hooks.pretxncommit.unexpectedabort= + now at: second-patch + $ echo bbbb >> file2 + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > precommit.checkvisibility = sh "$TESTTMP/checkvisibility.sh" + > EOF + + $ sh "$TESTTMP/checkvisibility.sh" + ==== + 1:e30108269082 + M file2 + ==== + + $ hg qrefresh + ==== + 0:25e397dabed2 + A file2 + ==== + transaction abort! + rollback completed + refresh interrupted while patch was popped! (revert --all, qpush to recover) + abort: pretxncommit.unexpectedabort hook exited with status 1 + [255] + + $ sh "$TESTTMP/checkvisibility.sh" + ==== + 0:25e397dabed2 + ==== + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > precommit.checkvisibility = + > EOF + +== test visibility to pretxncommit external hook + + $ hg update -C -q + $ rm -f file2 + $ hg qpush -q second-patch --config hooks.pretxncommit.unexpectedabort= + now at: second-patch + $ echo bbbb >> file2 + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > pretxncommit.checkvisibility = sh "$TESTTMP/checkvisibility.sh" + > # make checkvisibility run before unexpectedabort + > priority.pretxncommit.checkvisibility = 10 + > EOF + + $ sh "$TESTTMP/checkvisibility.sh" + ==== + 1:e30108269082 + M file2 + ==== + + $ hg qrefresh + ==== + 0:25e397dabed2 + A file2 + ==== + transaction abort! + rollback completed + refresh interrupted while patch was popped! (revert --all, qpush to recover) + abort: pretxncommit.unexpectedabort hook exited with status 1 + [255] + + $ sh "$TESTTMP/checkvisibility.sh" + ==== + 0:25e397dabed2 + ==== + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > pretxncommit.checkvisibility = + > EOF