Mercurial > hg
view tests/test-hook @ 10274:04207f5e7344 stable
mq: Do not translate import message that are appended to commits.
We should not translate the "imported patch" message. The translated message
confuses the detection whether the user has not updated the commit message yet.
We try to avoid to translate generated commit messages.
author | David Soria Parra <dsp@php.net> |
---|---|
date | Wed, 20 Jan 2010 23:23:18 +0100 |
parents | 7f5a71946aaa |
children | 0e64d814d7d0 |
line wrap: on
line source
#!/bin/sh cp "$TESTDIR"/printenv.py . # commit hooks can see env vars hg init a cd a echo "[hooks]" > .hg/hgrc echo 'commit = unset HG_LOCAL HG_TAG; python ../printenv.py commit' >> .hg/hgrc echo 'commit.b = unset HG_LOCAL HG_TAG; python ../printenv.py commit.b' >> .hg/hgrc echo 'precommit = unset HG_LOCAL HG_NODE HG_TAG; python ../printenv.py precommit' >> .hg/hgrc echo 'pretxncommit = unset HG_LOCAL HG_TAG; python ../printenv.py pretxncommit' >> .hg/hgrc echo 'pretxncommit.tip = hg -q tip' >> .hg/hgrc echo 'pre-identify = python ../printenv.py pre-identify 1' >> .hg/hgrc echo 'pre-cat = python ../printenv.py pre-cat' >> .hg/hgrc echo 'post-cat = python ../printenv.py post-cat' >> .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 = python ../printenv.py prechangegroup' >> .hg/hgrc echo 'changegroup = python ../printenv.py changegroup' >> .hg/hgrc echo 'incoming = python ../printenv.py incoming' >> .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 merge 1 hg commit -m merge -d '2 0' # test generic hooks hg id hg cat b cd ../b hg pull ../a # tag hooks can see env vars cd ../a echo 'pretag = python ../printenv.py pretag' >> .hg/hgrc echo 'tag = unset HG_PARENT1 HG_PARENT2; python ../printenv.py tag' >> .hg/hgrc hg tag -d '3 0' a hg tag -l la # pretag hook can forbid tagging echo 'pretag.forbid = python ../printenv.py pretag.forbid 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.forbid0 = hg tip -q' >> .hg/hgrc echo 'pretxncommit.forbid1 = python ../printenv.py pretxncommit.forbid 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 = python ../printenv.py precommit.forbid 1' >> .hg/hgrc hg commit -m 'fail' -d '4 0' hg -q tip # preupdate hook can prevent update echo 'preupdate = python ../printenv.py preupdate' >> .hg/hgrc hg update 1 # update hook echo 'update = python ../printenv.py update' >> .hg/hgrc hg update # prechangegroup hook can prevent incoming changes cd ../b hg -q tip echo '[hooks]' > .hg/hgrc echo 'prechangegroup.forbid = python ../printenv.py prechangegroup.forbid 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.forbid0 = hg tip -q' >> .hg/hgrc echo 'pretxnchangegroup.forbid1 = python ../printenv.py pretxnchangegroup.forbid 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 = python ../printenv.py preoutgoing' >> ../a/.hg/hgrc echo 'outgoing = python ../printenv.py outgoing' >> ../a/.hg/hgrc hg pull ../a hg rollback # preoutgoing hook can prevent outgoing changes echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> ../a/.hg/hgrc hg pull ../a # outgoing hooks work for local clones cd .. echo '[hooks]' > a/.hg/hgrc echo 'preoutgoing = python ../printenv.py preoutgoing' >> a/.hg/hgrc echo 'outgoing = python ../printenv.py outgoing' >> a/.hg/hgrc hg clone a c rm -rf c # preoutgoing hook can prevent outgoing changes for local clones echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> a/.hg/hgrc hg clone a zzz cd b cat > hooktests.py <<EOF from mercurial import util uncallable = 0 def printargs(args): args.pop('ui', None) args.pop('repo', None) a = list(args.items()) a.sort() print 'hook args:' for k, v in a: print ' ', k, v def passhook(**args): printargs(args) def failhook(**args): printargs(args) return True class LocalException(Exception): pass def raisehook(**args): raise LocalException('exception from hook') def aborthook(**args): raise util.Abort('raise abort from hook') def brokenhook(**args): return 1 + {} class container: unreachable = 1 EOF echo '# test python hooks' PYTHONPATH="`pwd`:$PYTHONPATH" export PYTHONPATH echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.broken = python:hooktests.brokenhook' >> ../a/.hg/hgrc hg pull ../a 2>&1 | grep 'raised an exception' echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.raise = python:hooktests.raisehook' >> ../a/.hg/hgrc hg pull ../a 2>&1 | grep 'raised an exception' echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.abort = python:hooktests.aborthook' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.fail = python:hooktests.failhook' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.uncallable = python:hooktests.uncallable' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.nohook = python:hooktests.nohook' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.nomodule = python:nomodule' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.badmodule = python:nomodule.nowhere' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.unreachable = python:hooktests.container.unreachable' >> ../a/.hg/hgrc hg pull ../a echo '[hooks]' > ../a/.hg/hgrc echo 'preoutgoing.pass = python:hooktests.passhook' >> ../a/.hg/hgrc hg pull ../a echo '# make sure --traceback works' echo '[hooks]' > .hg/hgrc echo 'commit.abort = python:hooktests.aborthook' >> .hg/hgrc echo a >> a hg --traceback commit -A -m a 2>&1 | grep '^Traceback' cd .. hg init c cd c cat > hookext.py <<EOF def autohook(**args): print "Automatically installed hook" def reposetup(ui, repo): repo.ui.setconfig("hooks", "commit.auto", autohook) EOF echo '[extensions]' >> .hg/hgrc echo 'hookext = hookext.py' >> .hg/hgrc touch foo hg add foo hg ci -m 'add foo' echo >> foo hg ci --debug -m 'change foo' | sed -e 's/ at .*>/>/' hg showconfig hooks | sed -e 's/ at .*>/>/' echo '# test python hook configured with python:[file]:[hook] syntax' cd .. mkdir d cd d hg init repo mkdir hooks cd hooks cat > testhooks.py <<EOF def testhook(**args): print 'hook works' EOF echo '[hooks]' > ../repo/.hg/hgrc echo "pre-commit.test = python:`pwd`/testhooks.py:testhook" >> ../repo/.hg/hgrc cd ../repo hg commit cd ../../b echo '# make sure --traceback works on hook import failure' cat > importfail.py <<EOF import somebogusmodule # dereference something in the module to force demandimport to load it somebogusmodule.whatever EOF echo '[hooks]' > .hg/hgrc echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc echo a >> a hg --traceback commit -Ama 2>&1 | egrep '^(exception|Traceback|ImportError)' exit 0