author | Matt Mackall <mpm@selenic.com> |
Sun, 01 Jan 2012 13:37:44 -0600 | |
changeset 15759 | 6ea0a07e1ea1 |
parent 15519 | bb9ad375b51c |
child 16039 | 093b75c7b44b |
permissions | -rw-r--r-- |
15519
bb9ad375b51c
tests: add 'hghave system-sh' to skip tests on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
13237
diff
changeset
|
1 |
$ "$TESTDIR/hghave" system-sh || exit 80 |
bb9ad375b51c
tests: add 'hghave system-sh' to skip tests on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
13237
diff
changeset
|
2 |
|
13237
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
3 |
Verify that pending changesets are seen by pretxn* hooks but not by other |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
4 |
processes that access the destination repo while the hooks are running. |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
5 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
6 |
The hooks (python and external) both reject changesets after some think time, |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
7 |
during which another process runs pull. Each hook creates a file ('notify') to |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
8 |
indicate to the controlling process that it is running; the process removes the |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
9 |
file to indicate the hook can terminate. |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
10 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
11 |
init env vars |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
12 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
13 |
$ d=`pwd` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
14 |
$ maxwait=20 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
15 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
16 |
utility to run the test - start a push in the background and run pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
17 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
18 |
$ dotest() { |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
19 |
> rm -f notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
20 |
> printf 'push '; hg -R child-push tip --template '{node}\n' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
21 |
> hg -R child-push -q push > push.out 2>&1 & |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
22 |
> |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
23 |
> # wait for hook to create the notify file |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
24 |
> i=$maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
25 |
> while [ ! -f notify -a $i != 0 ]; do |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
26 |
> sleep 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
27 |
> i=`expr $i - 1` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
28 |
> done |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
29 |
> |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
30 |
> # run pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
31 |
> hg -R child-pull -q pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
32 |
> rc=$? |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
33 |
> |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
34 |
> # tell hook to finish; notify should exist. |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
35 |
> rm notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
36 |
> wait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
37 |
> |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
38 |
> cat push.out |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
39 |
> printf 'pull '; hg -R child-pull tip --template '{node}\n' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
40 |
> return $rc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
41 |
> } |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
42 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
43 |
python hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
44 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
45 |
$ cat <<EOF > reject.py |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
46 |
> import os, time |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
47 |
> from mercurial import ui, localrepo |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
48 |
> def rejecthook(ui, repo, hooktype, node, **opts): |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
49 |
> ui.write('hook %s\\n' % repo['tip'].hex()) |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
50 |
> # create the notify file so caller knows we're running |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
51 |
> fpath = os.path.join('$d', 'notify') |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
52 |
> f = open(fpath, 'w') |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
53 |
> f.close() |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
54 |
> # wait for ack - caller should delete the notify file |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
55 |
> i = $maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
56 |
> while os.path.exists(fpath) and i > 0: |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
57 |
> time.sleep(1) |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
58 |
> i -= 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
59 |
> return True # reject the changesets |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
60 |
> EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
61 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
62 |
external hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
63 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
64 |
$ cat <<EOF > reject.sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
65 |
> #! /bin/sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
66 |
> printf 'hook '; hg tip --template '{node}\\n' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
67 |
> # create the notify file so caller knows we're running |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
68 |
> fpath=$d/notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
69 |
> touch \$fpath |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
70 |
> # wait for ack - caller should delete the notify file |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
71 |
> i=$maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
72 |
> while [ -f \$fpath -a \$i != 0 ]; do |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
73 |
> sleep 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
74 |
> i=\`expr \$i - 1\` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
75 |
> done |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
76 |
> exit 1 # reject the changesets |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
77 |
> EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
78 |
$ chmod +x reject.sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
79 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
80 |
create repos |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
81 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
82 |
$ hg init parent |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
83 |
$ hg clone -q parent child-push |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
84 |
$ hg clone -q parent child-pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
85 |
$ echo a > child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
86 |
$ hg -R child-push add child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
87 |
$ hg -R child-push commit -m a -d '1000000 0' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
88 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
89 |
test python hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
90 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
91 |
$ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
92 |
> [extensions] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
93 |
> reject = $d/reject.py |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
94 |
> [hooks] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
95 |
> pretxnchangegroup = python:reject.rejecthook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
96 |
> EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
97 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
98 |
$ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
99 |
push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
100 |
hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
101 |
transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
102 |
rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
103 |
abort: pretxnchangegroup hook failed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
104 |
pull 0000000000000000000000000000000000000000 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
105 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
106 |
test external hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
107 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
108 |
$ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
109 |
> [hooks] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
110 |
> pretxnchangegroup = $d/reject.sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
111 |
> EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
112 |
|
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
113 |
$ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
114 |
push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
115 |
hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
116 |
transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
117 |
rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
118 |
abort: pretxnchangegroup hook exited with status 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
119 |
pull 0000000000000000000000000000000000000000 |