|
1 $ echo "[extensions]" >> $HGRCPATH |
|
2 $ echo "share = " >> $HGRCPATH |
|
3 |
|
4 prepare repo1 |
|
5 |
|
6 $ hg init repo1 |
|
7 $ cd repo1 |
|
8 $ echo a > a |
|
9 $ hg commit -A -m'init' |
|
10 adding a |
|
11 $ echo a >> a |
|
12 $ hg commit -m'change in shared clone' |
|
13 $ echo b > b |
|
14 $ hg commit -A -m'another file' |
|
15 adding b |
|
16 |
|
17 share it |
|
18 |
|
19 $ cd .. |
|
20 $ hg share repo1 repo2 |
|
21 updating working directory |
|
22 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
23 |
|
24 unshare it |
|
25 |
|
26 $ cd repo2 |
|
27 $ hg unshare |
|
28 |
|
29 check that a change does not propagate |
|
30 |
|
31 $ echo b >> b |
|
32 $ hg commit -m'change in unshared' |
|
33 $ cd ../repo1 |
|
34 $ hg id -r tip |
|
35 c2e0ac586386 tip |
|
36 |
|
37 $ cd .. |
|
38 |
|
39 test sharing bookmarks |
|
40 |
|
41 $ hg share -B repo1 repo3 |
|
42 updating working directory |
|
43 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
44 $ cd repo1 |
|
45 $ hg bookmark bm1 |
|
46 $ hg bookmarks |
|
47 * bm1 2:c2e0ac586386 |
|
48 $ cd ../repo2 |
|
49 $ hg book bm2 |
|
50 $ hg bookmarks |
|
51 * bm2 3:0e6e70d1d5f1 |
|
52 $ cd ../repo3 |
|
53 $ hg bookmarks |
|
54 bm1 2:c2e0ac586386 |
|
55 $ hg book bm3 |
|
56 $ hg bookmarks |
|
57 bm1 2:c2e0ac586386 |
|
58 * bm3 2:c2e0ac586386 |
|
59 $ cd ../repo1 |
|
60 $ hg bookmarks |
|
61 * bm1 2:c2e0ac586386 |
|
62 bm3 2:c2e0ac586386 |
|
63 |
|
64 check whether HG_PENDING makes pending changes only in relatd |
|
65 repositories visible to an external hook. |
|
66 |
|
67 In "hg share" case, another transaction can't run in other |
|
68 repositories sharing same source repository, because starting |
|
69 transaction requires locking store of source repository. |
|
70 |
|
71 Therefore, this test scenario ignores checking visibility of |
|
72 .hg/bookmakrs.pending in repo2, which shares repo1 without bookmarks. |
|
73 |
|
74 $ cat > $TESTTMP/checkbookmarks.sh <<EOF |
|
75 > echo "@repo1" |
|
76 > hg -R "$TESTTMP/repo1" bookmarks |
|
77 > echo "@repo2" |
|
78 > hg -R "$TESTTMP/repo2" bookmarks |
|
79 > echo "@repo3" |
|
80 > hg -R "$TESTTMP/repo3" bookmarks |
|
81 > exit 1 # to avoid adding new bookmark for subsequent tests |
|
82 > EOF |
|
83 |
|
84 $ cd ../repo1 |
|
85 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkbookmarks.sh" -q book bmX |
|
86 @repo1 |
|
87 bm1 2:c2e0ac586386 |
|
88 bm3 2:c2e0ac586386 |
|
89 * bmX 2:c2e0ac586386 |
|
90 @repo2 |
|
91 * bm2 3:0e6e70d1d5f1 |
|
92 @repo3 |
|
93 bm1 2:c2e0ac586386 |
|
94 * bm3 2:c2e0ac586386 |
|
95 bmX 2:c2e0ac586386 |
|
96 transaction abort! |
|
97 rollback completed |
|
98 abort: pretxnclose hook exited with status 1 |
|
99 [255] |
|
100 $ hg book bm1 |
|
101 |
|
102 FYI, in contrast to above test, bmX is invisible in repo1 (= shared |
|
103 src), because (1) HG_PENDING refers only repo3 and (2) |
|
104 "bookmarks.pending" is written only into repo3. |
|
105 |
|
106 $ cd ../repo3 |
|
107 $ hg --config hooks.pretxnclose="sh $TESTTMP/checkbookmarks.sh" -q book bmX |
|
108 @repo1 |
|
109 * bm1 2:c2e0ac586386 |
|
110 bm3 2:c2e0ac586386 |
|
111 @repo2 |
|
112 * bm2 3:0e6e70d1d5f1 |
|
113 @repo3 |
|
114 bm1 2:c2e0ac586386 |
|
115 bm3 2:c2e0ac586386 |
|
116 * bmX 2:c2e0ac586386 |
|
117 transaction abort! |
|
118 rollback completed |
|
119 abort: pretxnclose hook exited with status 1 |
|
120 [255] |
|
121 $ hg book bm3 |
|
122 |
|
123 $ cd ../repo1 |
|
124 |
|
125 test that commits work |
|
126 |
|
127 $ echo 'shared bookmarks' > a |
|
128 $ hg commit -m 'testing shared bookmarks' |
|
129 $ hg bookmarks |
|
130 * bm1 3:b87954705719 |
|
131 bm3 2:c2e0ac586386 |
|
132 $ cd ../repo3 |
|
133 $ hg bookmarks |
|
134 bm1 3:b87954705719 |
|
135 * bm3 2:c2e0ac586386 |
|
136 $ echo 'more shared bookmarks' > a |
|
137 $ hg commit -m 'testing shared bookmarks' |
|
138 created new head |
|
139 $ hg bookmarks |
|
140 bm1 3:b87954705719 |
|
141 * bm3 4:62f4ded848e4 |
|
142 $ cd ../repo1 |
|
143 $ hg bookmarks |
|
144 * bm1 3:b87954705719 |
|
145 bm3 4:62f4ded848e4 |
|
146 $ cd .. |
|
147 |
|
148 test pushing bookmarks works |
|
149 |
|
150 $ hg clone repo3 repo4 |
|
151 updating to branch default |
|
152 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
153 $ cd repo4 |
|
154 $ hg boo bm4 |
|
155 $ echo foo > b |
|
156 $ hg commit -m 'foo in b' |
|
157 $ hg boo |
|
158 bm1 3:b87954705719 |
|
159 bm3 4:62f4ded848e4 |
|
160 * bm4 5:92793bfc8cad |
|
161 $ hg push -B bm4 |
|
162 pushing to $TESTTMP/repo3 |
|
163 searching for changes |
|
164 adding changesets |
|
165 adding manifests |
|
166 adding file changes |
|
167 added 1 changesets with 1 changes to 1 files |
|
168 exporting bookmark bm4 |
|
169 $ cd ../repo1 |
|
170 $ hg bookmarks |
|
171 * bm1 3:b87954705719 |
|
172 bm3 4:62f4ded848e4 |
|
173 bm4 5:92793bfc8cad |
|
174 $ cd ../repo3 |
|
175 $ hg bookmarks |
|
176 bm1 3:b87954705719 |
|
177 * bm3 4:62f4ded848e4 |
|
178 bm4 5:92793bfc8cad |
|
179 $ cd .. |
|
180 |
|
181 test behavior when sharing a shared repo |
|
182 |
|
183 $ hg share -B repo3 missingdir/repo5 |
|
184 updating working directory |
|
185 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
186 $ cd missingdir/repo5 |
|
187 $ hg book |
|
188 bm1 3:b87954705719 |
|
189 bm3 4:62f4ded848e4 |
|
190 bm4 5:92793bfc8cad |
|
191 $ cd ../.. |
|
192 |
|
193 test what happens when an active bookmark is deleted |
|
194 |
|
195 $ cd repo1 |
|
196 $ hg boo -d bm3 |
|
197 $ hg boo |
|
198 * bm1 3:b87954705719 |
|
199 bm4 5:92793bfc8cad |
|
200 $ cd ../repo3 |
|
201 $ hg boo |
|
202 bm1 3:b87954705719 |
|
203 bm4 5:92793bfc8cad |
|
204 $ cd .. |
|
205 |
|
206 verify that bookmarks are not written on failed transaction |
|
207 |
|
208 $ cat > failpullbookmarks.py << EOF |
|
209 > """A small extension that makes bookmark pulls fail, for testing""" |
|
210 > from __future__ import absolute_import |
|
211 > from mercurial import ( |
|
212 > error, |
|
213 > exchange, |
|
214 > extensions, |
|
215 > ) |
|
216 > def _pullbookmarks(orig, pullop): |
|
217 > orig(pullop) |
|
218 > raise error.HookAbort('forced failure by extension') |
|
219 > def extsetup(ui): |
|
220 > extensions.wrapfunction(exchange, '_pullbookmarks', _pullbookmarks) |
|
221 > EOF |
|
222 $ cd repo4 |
|
223 $ hg boo |
|
224 bm1 3:b87954705719 |
|
225 bm3 4:62f4ded848e4 |
|
226 * bm4 5:92793bfc8cad |
|
227 $ cd ../repo3 |
|
228 $ hg boo |
|
229 bm1 3:b87954705719 |
|
230 bm4 5:92793bfc8cad |
|
231 $ hg --config "extensions.failpullbookmarks=$TESTTMP/failpullbookmarks.py" pull $TESTTMP/repo4 |
|
232 pulling from $TESTTMP/repo4 |
|
233 searching for changes |
|
234 no changes found |
|
235 adding remote bookmark bm3 |
|
236 abort: forced failure by extension |
|
237 [255] |
|
238 $ hg boo |
|
239 bm1 3:b87954705719 |
|
240 bm4 5:92793bfc8cad |
|
241 $ hg pull $TESTTMP/repo4 |
|
242 pulling from $TESTTMP/repo4 |
|
243 searching for changes |
|
244 no changes found |
|
245 adding remote bookmark bm3 |
|
246 1 local changesets published |
|
247 $ hg boo |
|
248 bm1 3:b87954705719 |
|
249 * bm3 4:62f4ded848e4 |
|
250 bm4 5:92793bfc8cad |
|
251 $ cd .. |
|
252 |
|
253 verify bookmark behavior after unshare |
|
254 |
|
255 $ cd repo3 |
|
256 $ hg unshare |
|
257 $ hg boo |
|
258 bm1 3:b87954705719 |
|
259 * bm3 4:62f4ded848e4 |
|
260 bm4 5:92793bfc8cad |
|
261 $ hg boo -d bm4 |
|
262 $ hg boo bm5 |
|
263 $ hg boo |
|
264 bm1 3:b87954705719 |
|
265 bm3 4:62f4ded848e4 |
|
266 * bm5 4:62f4ded848e4 |
|
267 $ cd ../repo1 |
|
268 $ hg boo |
|
269 * bm1 3:b87954705719 |
|
270 bm3 4:62f4ded848e4 |
|
271 bm4 5:92793bfc8cad |
|
272 $ cd .. |