Mercurial > hg
annotate tests/test-pending.t @ 19290:f21f4a1b6c24
log: move log file walk to its own function
This moves the logic that determines which changesets to process during a
'hg log foo.txt' command. Putting it in its own function allows extensions
to modify how the file log is traversed. For instance, the current
implementation uses filelog revs heavily. Other implementations may not have
filelog revs available.
The function throws an exception if the traversal is not possible via the
filelog, so the parent function can do things the slow way if necessary
(by walking the entire commit history).
Aside from the exception throwing, no logic is changed.
author | Durham Goode <durham@fb.com> |
---|---|
date | Thu, 30 May 2013 19:25:55 -0700 |
parents | 921458360270 |
children | 8678b1eafbcf |
rev | line source |
---|---|
13237
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
1 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
|
2 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
|
3 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
4 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
|
5 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
|
6 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
|
7 file to indicate the hook can terminate. |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
8 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
9 init env vars |
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 $ d=`pwd` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
12 $ maxwait=20 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
13 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
14 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
|
15 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
16 $ dotest() { |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
17 > rm -f notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
18 > 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
|
19 > 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
|
20 > |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
21 > # wait for hook to create the notify file |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
22 > i=$maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
23 > while [ ! -f notify -a $i != 0 ]; do |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
24 > sleep 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
25 > i=`expr $i - 1` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
26 > done |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
27 > |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
28 > # run pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
29 > hg -R child-pull -q pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
30 > rc=$? |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
31 > |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
32 > # tell hook to finish; notify should exist. |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
33 > rm notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
34 > wait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
35 > |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
36 > cat push.out |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
37 > 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
|
38 > return $rc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
39 > } |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
40 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
41 python hook |
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 $ cat <<EOF > reject.py |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
44 > import os, time |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
45 > from mercurial import ui, localrepo |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
46 > def rejecthook(ui, repo, hooktype, node, **opts): |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
47 > ui.write('hook %s\\n' % repo['tip'].hex()) |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
48 > # 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
|
49 > fpath = os.path.join('$d', 'notify') |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
50 > f = open(fpath, 'w') |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
51 > f.close() |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
52 > # 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
|
53 > i = $maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
54 > while os.path.exists(fpath) and i > 0: |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
55 > time.sleep(1) |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
56 > i -= 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
57 > return True # reject the changesets |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
58 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
59 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
60 external hook |
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 $ cat <<EOF > reject.sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
63 > printf 'hook '; hg tip --template '{node}\\n' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
64 > # 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
|
65 > fpath=$d/notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
66 > touch \$fpath |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
67 > # 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
|
68 > i=$maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
69 > while [ -f \$fpath -a \$i != 0 ]; do |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
70 > sleep 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
71 > i=\`expr \$i - 1\` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
72 > done |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
73 > exit 1 # reject the changesets |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
74 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
75 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
76 create repos |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
77 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
78 $ hg init parent |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
79 $ hg clone -q parent child-push |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
80 $ hg clone -q parent child-pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
81 $ echo a > child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
82 $ hg -R child-push add child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
83 $ 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
|
84 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
85 test python hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
86 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
87 $ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
88 > [extensions] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
89 > reject = $d/reject.py |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
90 > [hooks] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
91 > pretxnchangegroup = python:reject.rejecthook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
92 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
93 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
94 $ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
95 push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
96 hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
97 transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
98 rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
99 abort: pretxnchangegroup hook failed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
100 pull 0000000000000000000000000000000000000000 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
101 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
102 test external hook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
103 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
104 $ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
105 > [hooks] |
16975
921458360270
tests: remove hghave system-sh from test-pending.t
Mads Kiilerich <mads@kiilerich.com>
parents:
16107
diff
changeset
|
106 > pretxnchangegroup = sh $d/reject.sh |
13237
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
107 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
108 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
109 $ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
110 push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
111 hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
112 transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
113 rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
114 abort: pretxnchangegroup hook exited with status 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
115 pull 0000000000000000000000000000000000000000 |