tests/test-hook
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Wed, 19 Apr 2006 11:41:25 -0700
changeset 2096 f5ebe964c6be
parent 1933 7544700fd931
child 2155 ff255b41b4aa
permissions -rwxr-xr-x
Ignore EPIPE in pipefilter This hides the following traceback (there's a race condition involved, so you may have to try a few times to hit it): $ hg sign --key key-that-does-not-exist Signing 2062:4bad92f4ea65 gpg: skipped "key-that-does-not-exist": secret key not available gpg: signing failed: secret key not available Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 442, in __bootstrap self.run() File "threading.py", line 422, in run self.__target(*self.__args, **self.__kwargs) File "mercurial/util.py", line 24, in writer pin.close() IOError: [Errno 32] Broken pipe abort: Error while signing

#!/bin/sh

# commit hooks can see env vars
hg init a
cd a
echo "[hooks]" > .hg/hgrc
echo 'commit = echo commit hook: n=$HG_NODE p1=$HG_PARENT1 p2=$HG_PARENT2' >> .hg/hgrc
echo 'commit.b = echo commit hook b' >> .hg/hgrc
echo 'precommit = echo precommit hook: p1=$HG_PARENT1 p2=$HG_PARENT2' >> .hg/hgrc
echo 'pretxncommit = echo pretxncommit hook: n=$HG_NODE p1=$HG_PARENT1 p2=$HG_PARENT2; hg -q tip' >> .hg/hgrc
echo a > a
hg add a
hg commit -m a -d "1000000 0"

hg clone . ../b
cd ../b

# changegroup hooks can see env vars
echo '[hooks]' > .hg/hgrc
echo 'prechangegroup = echo prechangegroup hook' >> .hg/hgrc
echo 'changegroup = echo changegroup hook: n=$HG_NODE' >> .hg/hgrc
echo 'incoming = echo incoming hook: n=$HG_NODE' >> .hg/hgrc

# pretxncommit and commit hooks can see both parents of merge
cd ../a
echo b >> a
hg commit -m a1 -d "1 0"
hg update -C 0
echo b > b
hg add b
hg commit -m b -d '1 0'
hg update -m 1
hg commit -m merge -d '2 0'

cd ../b
hg pull ../a

# tag hooks can see env vars
cd ../a
echo 'pretag = echo pretag hook: t=$HG_TAG n=$HG_NODE l=$HG_LOCAL' >> .hg/hgrc
echo 'tag = echo tag hook: t=$HG_TAG n=$HG_NODE l=$HG_LOCAL' >> .hg/hgrc
hg tag -d '3 0' a
hg tag -l la

# pretag hook can forbid tagging
echo 'pretag.forbid = echo pretag.forbid hook; exit 1' >> .hg/hgrc
hg tag -d '4 0' fa
hg tag -l fla

# pretxncommit hook can see changeset, can roll back txn, changeset
# no more there after
echo 'pretxncommit.forbid = echo pretxncommit.forbid hook: tip=`hg -q tip`; exit 1' >> .hg/hgrc
echo z > z
hg add z
hg -q tip
hg commit -m 'fail' -d '4 0'
hg -q tip

# precommit hook can prevent commit
echo 'precommit.forbid = echo precommit.forbid hook; exit 1' >> .hg/hgrc
hg commit -m 'fail' -d '4 0'
hg -q tip

# prechangegroup hook can prevent incoming changes
cd ../b
hg -q tip
echo '[hooks]' > .hg/hgrc
echo 'prechangegroup.forbid = echo prechangegroup.forbid hook; exit 1' >> .hg/hgrc
hg pull ../a

# pretxnchangegroup hook can see incoming changes, can roll back txn,
# incoming changes no longer there after
echo '[hooks]' > .hg/hgrc
echo 'pretxnchangegroup.forbid = echo pretxnchangegroup.forbid hook: tip=`hg -q tip`; exit 1' >> .hg/hgrc
hg pull ../a
hg -q tip

# outgoing hooks can see env vars
rm .hg/hgrc
echo '[hooks]' > ../a/.hg/hgrc
echo 'preoutgoing = echo preoutgoing hook: s=$HG_SOURCE' >> ../a/.hg/hgrc
echo 'outgoing = echo outgoing hook: n=$HG_NODE s=$HG_SOURCE' >> ../a/.hg/hgrc
hg pull ../a
hg undo

# preoutgoing hook can prevent outgoing changes
echo 'preoutgoing.forbid = echo preoutgoing.forbid hook; exit 1' >> ../a/.hg/hgrc
hg pull ../a

exit 0