diff options
Diffstat (limited to 'tests/test-hook.t')
-rw-r--r-- | tests/test-hook.t | 299 |
1 files changed, 103 insertions, 196 deletions
diff --git a/tests/test-hook.t b/tests/test-hook.t index 8b0b12c..6d61f19 100644 --- a/tests/test-hook.t +++ b/tests/test-hook.t @@ -2,25 +2,23 @@ commit hooks can see env vars $ hg init a $ cd a - $ cat > .hg/hgrc <<EOF - > [hooks] - > commit = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" commit" - > commit.b = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" commit.b" - > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= python \"$TESTDIR/printenv.py\" precommit" - > pretxncommit = sh -c "HG_LOCAL= HG_TAG= python \"$TESTDIR/printenv.py\" pretxncommit" - > pretxncommit.tip = hg -q tip - > pre-identify = python "$TESTDIR/printenv.py" pre-identify 1 - > pre-cat = python "$TESTDIR/printenv.py" pre-cat - > post-cat = python "$TESTDIR/printenv.py" post-cat - > EOF + $ echo "[hooks]" > .hg/hgrc + $ echo 'commit = unset HG_LOCAL HG_TAG; python "$TESTDIR"/printenv.py commit' >> .hg/hgrc + $ echo 'commit.b = unset HG_LOCAL HG_TAG; python "$TESTDIR"/printenv.py commit.b' >> .hg/hgrc + $ echo 'precommit = unset HG_LOCAL HG_NODE HG_TAG; python "$TESTDIR"/printenv.py precommit' >> .hg/hgrc + $ echo 'pretxncommit = unset HG_LOCAL HG_TAG; python "$TESTDIR"/printenv.py pretxncommit' >> .hg/hgrc + $ echo 'pretxncommit.tip = hg -q tip' >> .hg/hgrc + $ echo 'pre-identify = python "$TESTDIR"/printenv.py pre-identify 1' >> .hg/hgrc + $ echo 'pre-cat = python "$TESTDIR"/printenv.py pre-cat' >> .hg/hgrc + $ echo 'post-cat = python "$TESTDIR"/printenv.py post-cat' >> .hg/hgrc $ echo a > a $ hg add a $ hg commit -m a - precommit hook: HG_PARENT1=0000000000000000000000000000000000000000 - pretxncommit hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 HG_PENDING=$TESTTMP/a + precommit hook: HG_PARENT1=0000000000000000000000000000000000000000 + pretxncommit hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 HG_PENDING=$TESTTMP/a 0:cb9a9f314b8b - commit hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 - commit.b hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 + commit hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 + commit.b hook: HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 $ hg clone . ../b updating to branch default @@ -29,118 +27,114 @@ commit hooks can see env vars changegroup hooks can see env vars - $ cat > .hg/hgrc <<EOF - > [hooks] - > prechangegroup = python "$TESTDIR/printenv.py" prechangegroup - > changegroup = python "$TESTDIR/printenv.py" changegroup - > incoming = python "$TESTDIR/printenv.py" incoming - > EOF + $ echo '[hooks]' > .hg/hgrc + $ echo 'prechangegroup = python "$TESTDIR"/printenv.py prechangegroup' >> .hg/hgrc + $ echo 'changegroup = python "$TESTDIR"/printenv.py changegroup' >> .hg/hgrc + $ echo 'incoming = python "$TESTDIR"/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" - precommit hook: HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b - pretxncommit hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a + precommit hook: HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + pretxncommit hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a 1:ab228980c14d - commit hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b - commit.b hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + commit hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + commit.b hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b $ hg update -C 0 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo b > b $ hg add b $ hg commit -m b -d '1 0' - precommit hook: HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b - pretxncommit hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a + precommit hook: HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + pretxncommit hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a 2:ee9deb46ab31 - commit hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b - commit.b hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + commit hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b + commit.b hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b created new head $ hg merge 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg commit -m merge -d '2 0' - precommit hook: HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd - pretxncommit hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd HG_PENDING=$TESTTMP/a + precommit hook: HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd + pretxncommit hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd HG_PENDING=$TESTTMP/a 3:07f3376c1e65 - commit hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd - commit.b hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd + commit hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd + commit.b hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd test generic hooks $ hg id - pre-identify hook: HG_ARGS=id HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None} HG_PATS=[] + pre-identify hook: HG_ARGS=id HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'num': None, 'rev': '', 'tags': None} HG_PATS=[] warning: pre-identify hook exited with status 1 [1] $ hg cat b - pre-cat hook: HG_ARGS=cat b HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] + pre-cat hook: HG_ARGS=cat b HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] b - post-cat hook: HG_ARGS=cat b HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] HG_RESULT=0 + post-cat hook: HG_ARGS=cat b HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] HG_RESULT=0 $ cd ../b $ hg pull ../a pulling from ../a searching for changes - prechangegroup hook: HG_SOURCE=pull HG_URL=file:$TESTTMP/a + prechangegroup hook: HG_SOURCE=pull HG_URL=file:$TESTTMP/a adding changesets adding manifests adding file changes added 3 changesets with 2 changes to 2 files - changegroup hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_URL=file:$TESTTMP/a - incoming hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_URL=file:$TESTTMP/a - incoming hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_SOURCE=pull HG_URL=file:$TESTTMP/a - incoming hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_URL=file:$TESTTMP/a + changegroup hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_URL=file:$TESTTMP/a + incoming hook: HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_URL=file:$TESTTMP/a + incoming hook: HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_SOURCE=pull HG_URL=file:$TESTTMP/a + incoming hook: HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_URL=file:$TESTTMP/a (run 'hg update' to get a working copy) tag hooks can see env vars $ cd ../a - $ cat >> .hg/hgrc <<EOF - > pretag = python "$TESTDIR/printenv.py" pretag - > tag = sh -c "HG_PARENT1= HG_PARENT2= python \"$TESTDIR/printenv.py\" tag" - > EOF + $ echo 'pretag = python "$TESTDIR"/printenv.py pretag' >> .hg/hgrc + $ echo 'tag = unset HG_PARENT1 HG_PARENT2; python "$TESTDIR"/printenv.py tag' >> .hg/hgrc $ hg tag -d '3 0' a - pretag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a - precommit hook: HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 - pretxncommit hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PENDING=$TESTTMP/a + pretag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a + precommit hook: HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 + pretxncommit hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PENDING=$TESTTMP/a 4:539e4b31b6dc - tag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a - commit hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 - commit.b hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 + commit hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 + commit.b hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 + tag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a $ hg tag -l la - pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la - tag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la + pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la + tag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la pretag hook can forbid tagging - $ echo "pretag.forbid = python \"$TESTDIR/printenv.py\" pretag.forbid 1" >> .hg/hgrc + $ echo 'pretag.forbid = python "$TESTDIR"/printenv.py pretag.forbid 1' >> .hg/hgrc $ hg tag -d '4 0' fa - pretag hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa - pretag.forbid hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa + pretag hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa + pretag.forbid hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa abort: pretag.forbid hook exited with status 1 [255] $ hg tag -l fla - pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla - pretag.forbid hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla + pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla + pretag.forbid hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla abort: pretag.forbid hook exited with status 1 [255] 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 \"$TESTDIR/printenv.py\" pretxncommit.forbid 1" >> .hg/hgrc + $ echo 'pretxncommit.forbid0 = hg tip -q' >> .hg/hgrc + $ echo 'pretxncommit.forbid1 = python "$TESTDIR"/printenv.py pretxncommit.forbid 1' >> .hg/hgrc $ echo z > z $ hg add z $ hg -q tip 4:539e4b31b6dc $ hg commit -m 'fail' -d '4 0' - precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 - pretxncommit hook: HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a + precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 + pretxncommit hook: HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a 5:6f611f8018c1 5:6f611f8018c1 - pretxncommit.forbid hook: HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a + pretxncommit.forbid hook: HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a transaction abort! rollback completed abort: pretxncommit.forbid1 hook exited with status 1 @@ -150,10 +144,10 @@ more there after precommit hook can prevent commit - $ echo "precommit.forbid = python \"$TESTDIR/printenv.py\" precommit.forbid 1" >> .hg/hgrc + $ echo 'precommit.forbid = python "$TESTDIR"/printenv.py precommit.forbid 1' >> .hg/hgrc $ hg commit -m 'fail' -d '4 0' - precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 - precommit.forbid hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 + precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 + precommit.forbid hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 abort: precommit.forbid hook exited with status 1 [255] $ hg -q tip @@ -161,22 +155,22 @@ precommit hook can prevent commit preupdate hook can prevent update - $ echo "preupdate = python \"$TESTDIR/printenv.py\" preupdate" >> .hg/hgrc + $ echo 'preupdate = python "$TESTDIR"/printenv.py preupdate' >> .hg/hgrc $ hg update 1 - preupdate hook: HG_PARENT1=ab228980c14d + preupdate hook: HG_PARENT1=ab228980c14d 0 files updated, 0 files merged, 2 files removed, 0 files unresolved update hook - $ echo "update = python \"$TESTDIR/printenv.py\" update" >> .hg/hgrc + $ echo 'update = python "$TESTDIR"/printenv.py update' >> .hg/hgrc $ hg update - preupdate hook: HG_PARENT1=539e4b31b6dc - update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc + preupdate hook: HG_PARENT1=539e4b31b6dc + update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc 2 files updated, 0 files merged, 0 files removed, 0 files unresolved pushkey hook - $ echo "pushkey = python \"$TESTDIR/printenv.py\" pushkey" >> .hg/hgrc + $ echo 'pushkey = python "$TESTDIR"/printenv.py pushkey' >> .hg/hgrc $ cd ../b $ hg bookmark -r null foo $ hg push -B foo ../a @@ -184,51 +178,47 @@ pushkey hook searching for changes no changes found exporting bookmark foo - pushkey hook: HG_KEY=foo HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_RET=1 - [1] + pushkey hook: HG_KEY=foo HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_RET=1 $ cd ../a listkeys hook - $ echo "listkeys = python \"$TESTDIR/printenv.py\" listkeys" >> .hg/hgrc + $ echo 'listkeys = python "$TESTDIR"/printenv.py listkeys' >> .hg/hgrc $ hg bookmark -r null bar $ cd ../b $ hg pull -B bar ../a pulling from ../a - listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} + listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} no changes found - listkeys hook: HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'} - listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} - adding remote bookmark bar + listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} importing bookmark bar $ cd ../a test that prepushkey can prevent incoming keys - $ echo "prepushkey = python \"$TESTDIR/printenv.py\" prepushkey.forbid 1" >> .hg/hgrc + $ echo 'prepushkey = python "$TESTDIR"/printenv.py prepushkey.forbid 1' >> .hg/hgrc $ cd ../b $ hg bookmark -r null baz $ hg push -B baz ../a pushing to ../a searching for changes no changes found - listkeys hook: HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'} - listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} - listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} + listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} + listkeys hook: HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'} exporting bookmark baz - prepushkey.forbid hook: HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 + prepushkey.forbid hook: HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 abort: prepushkey hook exited with status 1 [255] $ cd ../a test that prelistkeys can prevent listing keys - $ echo "prelistkeys = python \"$TESTDIR/printenv.py\" prelistkeys.forbid 1" >> .hg/hgrc + $ echo 'prelistkeys = python "$TESTDIR"/printenv.py prelistkeys.forbid 1' >> .hg/hgrc $ hg bookmark -r null quux $ cd ../b $ hg pull -B quux ../a pulling from ../a - prelistkeys.forbid hook: HG_NAMESPACE=bookmarks + prelistkeys.forbid hook: HG_NAMESPACE=bookmarks abort: prelistkeys hook exited with status 1 [255] $ cd ../a @@ -238,25 +228,21 @@ prechangegroup hook can prevent incoming changes $ cd ../b $ hg -q tip 3:07f3376c1e65 - $ cat > .hg/hgrc <<EOF - > [hooks] - > prechangegroup.forbid = python "$TESTDIR/printenv.py" prechangegroup.forbid 1 - > EOF + $ echo '[hooks]' > .hg/hgrc + $ echo 'prechangegroup.forbid = python "$TESTDIR"/printenv.py prechangegroup.forbid 1' >> .hg/hgrc $ hg pull ../a pulling from ../a searching for changes - prechangegroup.forbid hook: HG_SOURCE=pull HG_URL=file:$TESTTMP/a + prechangegroup.forbid hook: HG_SOURCE=pull HG_URL=file:$TESTTMP/a abort: prechangegroup.forbid hook exited with status 1 [255] pretxnchangegroup hook can see incoming changes, can roll back txn, incoming changes no longer there after - $ cat > .hg/hgrc <<EOF - > [hooks] - > pretxnchangegroup.forbid0 = hg tip -q - > pretxnchangegroup.forbid1 = python "$TESTDIR/printenv.py" pretxnchangegroup.forbid 1 - > EOF + $ echo '[hooks]' > .hg/hgrc + $ echo 'pretxnchangegroup.forbid0 = hg tip -q' >> .hg/hgrc + $ echo 'pretxnchangegroup.forbid1 = python "$TESTDIR"/printenv.py pretxnchangegroup.forbid 1' >> .hg/hgrc $ hg pull ../a pulling from ../a searching for changes @@ -265,7 +251,7 @@ incoming changes no longer there after adding file changes added 1 changesets with 1 changes to 1 files 4:539e4b31b6dc - pretxnchangegroup.forbid hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/b HG_SOURCE=pull HG_URL=file:$TESTTMP/a + pretxnchangegroup.forbid hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/b HG_SOURCE=pull HG_URL=file:$TESTTMP/a transaction abort! rollback completed abort: pretxnchangegroup.forbid1 hook exited with status 1 @@ -276,61 +262,56 @@ incoming changes no longer there after outgoing hooks can see env vars $ rm .hg/hgrc - $ cat > ../a/.hg/hgrc <<EOF - > [hooks] - > preoutgoing = python "$TESTDIR/printenv.py" preoutgoing - > outgoing = python "$TESTDIR/printenv.py" outgoing - > EOF + $ echo '[hooks]' > ../a/.hg/hgrc + $ echo 'preoutgoing = python "$TESTDIR"/printenv.py preoutgoing' >> ../a/.hg/hgrc + $ echo 'outgoing = python "$TESTDIR"/printenv.py outgoing' >> ../a/.hg/hgrc $ hg pull ../a pulling from ../a searching for changes - preoutgoing hook: HG_SOURCE=pull + preoutgoing hook: HG_SOURCE=pull adding changesets - outgoing hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_SOURCE=pull + outgoing hook: HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_SOURCE=pull adding manifests adding file changes added 1 changesets with 1 changes to 1 files - adding remote bookmark quux (run 'hg update' to get a working copy) $ hg rollback repository tip rolled back to revision 3 (undo pull) + working directory now based on revision 0 preoutgoing hook can prevent outgoing changes - $ echo "preoutgoing.forbid = python \"$TESTDIR/printenv.py\" preoutgoing.forbid 1" >> ../a/.hg/hgrc + $ echo 'preoutgoing.forbid = python "$TESTDIR"/printenv.py preoutgoing.forbid 1' >> ../a/.hg/hgrc $ hg pull ../a pulling from ../a searching for changes - preoutgoing hook: HG_SOURCE=pull - preoutgoing.forbid hook: HG_SOURCE=pull + preoutgoing hook: HG_SOURCE=pull + preoutgoing.forbid hook: HG_SOURCE=pull abort: preoutgoing.forbid hook exited with status 1 [255] outgoing hooks work for local clones $ cd .. - $ cat > a/.hg/hgrc <<EOF - > [hooks] - > preoutgoing = python "$TESTDIR/printenv.py" preoutgoing - > outgoing = python "$TESTDIR/printenv.py" outgoing - > EOF + $ echo '[hooks]' > a/.hg/hgrc + $ echo 'preoutgoing = python "$TESTDIR"/printenv.py preoutgoing' >> a/.hg/hgrc + $ echo 'outgoing = python "$TESTDIR"/printenv.py outgoing' >> a/.hg/hgrc $ hg clone a c - preoutgoing hook: HG_SOURCE=clone - outgoing hook: HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone + preoutgoing hook: HG_SOURCE=clone + outgoing hook: HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone updating to branch default 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ rm -rf c preoutgoing hook can prevent outgoing changes for local clones - $ echo "preoutgoing.forbid = python \"$TESTDIR/printenv.py\" preoutgoing.forbid 1" >> a/.hg/hgrc + $ echo 'preoutgoing.forbid = python "$TESTDIR"/printenv.py preoutgoing.forbid 1' >> a/.hg/hgrc $ hg clone a zzz - preoutgoing hook: HG_SOURCE=clone - preoutgoing.forbid hook: HG_SOURCE=clone + preoutgoing hook: HG_SOURCE=clone + preoutgoing.forbid hook: HG_SOURCE=clone abort: preoutgoing.forbid hook exited with status 1 [255] - - $ cd "$TESTTMP/b" + $ cd b $ cat > hooktests.py <<EOF > from mercurial import util @@ -368,20 +349,13 @@ preoutgoing hook can prevent outgoing changes for local clones > def verbosehook(ui, **args): > ui.note('verbose output from hook\n') > - > def printtags(ui, repo, **args): - > print repo.tags().keys() - > > class container: > unreachable = 1 > EOF test python hooks -#if windows - $ PYTHONPATH="$TESTTMP/b;$PYTHONPATH" -#else - $ PYTHONPATH="$TESTTMP/b:$PYTHONPATH" -#endif + $ PYTHONPATH="`pwd`:$PYTHONPATH" $ export PYTHONPATH $ echo '[hooks]' > ../a/.hg/hgrc @@ -466,7 +440,6 @@ test python hooks adding manifests adding file changes added 1 changesets with 1 changes to 1 files - adding remote bookmark quux (run 'hg update' to get a working copy) make sure --traceback works @@ -528,20 +501,6 @@ test python hook configured with python:[file]:[hook] syntax nothing changed [1] - $ echo '[hooks]' > .hg/hgrc - $ echo "update.ne = python:`pwd`/nonexisting.py:testhook" >> .hg/hgrc - $ echo "pre-identify.npmd = python:`pwd`/:no_python_module_dir" >> .hg/hgrc - - $ hg up null - loading update.ne hook failed: - abort: No such file or directory: $TESTTMP/d/repo/nonexisting.py - [255] - - $ hg id - loading pre-identify.npmd hook failed: - abort: No module named repo! - [255] - $ cd ../../b make sure --traceback works on hook import failure @@ -556,7 +515,7 @@ make sure --traceback works on hook import failure $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc $ echo a >> a - $ hg --traceback commit -ma 2>&1 | egrep -v '^( +File| [a-zA-Z(])' + $ hg --traceback commit -ma 2>&1 | egrep '^(exception|Traceback|ImportError)' exception from first failed import attempt: Traceback (most recent call last): ImportError: No module named somebogusmodule @@ -564,8 +523,6 @@ make sure --traceback works on hook import failure Traceback (most recent call last): ImportError: No module named hgext_importfail Traceback (most recent call last): - Abort: precommit.importfail hook is invalid (import of "importfail" failed) - abort: precommit.importfail hook is invalid (import of "importfail" failed) Issue1827: Hooks Update & Commit not completely post operation @@ -592,53 +549,3 @@ that is passed to pre/post hooks calling hook pre-identify: hooktests.verbosehook verbose output from hook cb9a9f314b8b - -Ensure hooks can be prioritized - - $ echo '[hooks]' > .hg/hgrc - $ echo 'pre-identify.a = python:hooktests.verbosehook' >> .hg/hgrc - $ echo 'pre-identify.b = python:hooktests.verbosehook' >> .hg/hgrc - $ echo 'priority.pre-identify.b = 1' >> .hg/hgrc - $ echo 'pre-identify.c = python:hooktests.verbosehook' >> .hg/hgrc - $ hg id --verbose - calling hook pre-identify.b: hooktests.verbosehook - verbose output from hook - calling hook pre-identify.a: hooktests.verbosehook - verbose output from hook - calling hook pre-identify.c: hooktests.verbosehook - verbose output from hook - cb9a9f314b8b - -new tags must be visible in pretxncommit (issue3210) - - $ echo 'pretxncommit.printtags = python:hooktests.printtags' >> .hg/hgrc - $ hg tag -f foo - ['a', 'foo', 'tip'] - -new commits must be visible in pretxnchangegroup (issue3428) - - $ cd .. - $ hg init to - $ echo '[hooks]' >> to/.hg/hgrc - $ echo 'pretxnchangegroup = hg --traceback tip' >> to/.hg/hgrc - $ echo a >> to/a - $ hg --cwd to ci -Ama - adding a - $ hg clone to from - updating to branch default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo aa >> from/a - $ hg --cwd from ci -mb - $ hg --cwd from push - pushing to $TESTTMP/to (glob) - searching for changes - adding changesets - adding manifests - adding file changes - added 1 changesets with 1 changes to 1 files - changeset: 1:9836a07b9b9d - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: b - |