Mercurial > public > mercurial-scm > hg
diff tests/test-backout.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 | d8463a743d7d |
children | 949e8c626d19 |
line wrap: on
line diff
--- a/tests/test-backout.t Sat Oct 17 01:15:34 2015 +0900 +++ b/tests/test-backout.t Sat Oct 17 01:15:34 2015 +0900 @@ -259,6 +259,60 @@ line 2 line 3 +Test visibility of in-memory dirstate changes outside transaction to +external hook process + + $ cat > $TESTTMP/checkvisibility.sh <<EOF + > echo "==== \$1:" + > hg parents --template "{rev}:{node|short}\n" + > echo "====" + > EOF + +"hg backout --merge REV1" at REV2 below implies steps below: + +(1) update to REV1 (REV2 => REV1) +(2) revert by REV1^1 +(3) commit backnig out revision (REV3) +(4) update to REV2 (REV3 => REV2) +(5) merge with REV3 (REV2 => REV2, REV3) + +== test visibility to external preupdate hook + + $ hg update -q -C 2 + $ hg --config extensions.strip= strip 3 + saved backup bundle to * (glob) + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate + > EOF + +("-m" is needed to avoid writing dirstte changes out at other than +invocation of the hook to be examined) + + $ hg backout --merge -d '3 0' 1 --tool=true -m 'fixed comment' + ==== preupdate: + 2:6ea3f2a197a2 + ==== + reverting a + created new head + changeset 3:d92a3f57f067 backs out changeset 1:5a50a024c182 + ==== preupdate: + 3:d92a3f57f067 + ==== + merging with changeset 3:d92a3f57f067 + ==== preupdate: + 2:6ea3f2a197a2 + ==== + merging a + 0 files updated, 1 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + + $ cat >> .hg/hgrc <<EOF + > [hooks] + > preupdate.visibility = + > EOF + $ cd .. backout should not back out subsequent changesets