Mercurial > hg
annotate tests/test-pending.t @ 14732:e9ed3506f066 stable
backout of d04ba50e104d: allow to qpop/push with a dirty working copy
The new behavior was breaking existing tools that relied on a sequence such as
this:
1) start with a dirty working copy
2) qimport some patch
3) try to qpush it
4) old behavior would fail at this point due to outstanding changes.
(new behavior would only fail if the outstanding changes and the patches
changes intersect)
5) innocent user qrefreshes, gets his local changes in the imported patch
It's worth considering if we can move this behavior to -f in the future.
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Fri, 24 Jun 2011 23:25:42 +0300 |
parents | c046978cc0a9 |
children | bb9ad375b51c |
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 > #! /bin/sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
64 > printf 'hook '; hg tip --template '{node}\\n' |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
65 > # 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
|
66 > fpath=$d/notify |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
67 > touch \$fpath |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
68 > # 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
|
69 > i=$maxwait |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
70 > while [ -f \$fpath -a \$i != 0 ]; do |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
71 > sleep 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
72 > i=\`expr \$i - 1\` |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
73 > done |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
74 > exit 1 # reject the changesets |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
75 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
76 $ chmod +x reject.sh |
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 create repos |
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 $ hg init parent |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
81 $ hg clone -q parent child-push |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
82 $ hg clone -q parent child-pull |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
83 $ echo a > child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
84 $ hg -R child-push add child-push/a |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
85 $ 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
|
86 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
87 test python hook |
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 $ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
90 > [extensions] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
91 > reject = $d/reject.py |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
92 > [hooks] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
93 > pretxnchangegroup = python:reject.rejecthook |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
94 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
95 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
96 $ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
97 push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
98 hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
99 transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
100 rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
101 abort: pretxnchangegroup hook failed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
102 pull 0000000000000000000000000000000000000000 |
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 test external hook |
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 $ cat <<EOF > parent/.hg/hgrc |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
107 > [hooks] |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
108 > pretxnchangegroup = $d/reject.sh |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
109 > EOF |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
110 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
111 $ dotest |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
112 push 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
113 hook 29b62aeb769fdf78d8d9c5f28b017f76d7ef824b |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
114 transaction abort! |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
115 rollback completed |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
116 abort: pretxnchangegroup hook exited with status 1 |
c046978cc0a9
tests: check visibility of pending changesets
John Coomes <john.coomes@oracle.com>
parents:
diff
changeset
|
117 pull 0000000000000000000000000000000000000000 |