14 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py commit" |
14 > commit = sh -c "HG_LOCAL= HG_TAG= printenv.py commit" |
15 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py commit.b" |
15 > commit.b = sh -c "HG_LOCAL= HG_TAG= printenv.py commit.b" |
16 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py precommit" |
16 > precommit = sh -c "HG_LOCAL= HG_NODE= HG_TAG= printenv.py precommit" |
17 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxncommit" |
17 > pretxncommit = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxncommit" |
18 > pretxncommit.tip = hg -q tip |
18 > pretxncommit.tip = hg -q tip |
19 > pre-identify = printenv.py pre-identify 1 |
19 > pre-identify = sh -c "printenv.py pre-identify 1" |
20 > pre-cat = printenv.py pre-cat |
20 > pre-cat = sh -c "printenv.py pre-cat" |
21 > post-cat = printenv.py post-cat |
21 > post-cat = sh -c "printenv.py post-cat" |
22 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnopen" |
22 > pretxnopen = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnopen" |
23 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnclose" |
23 > pretxnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py pretxnclose" |
24 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py txnclose" |
24 > txnclose = sh -c "HG_LOCAL= HG_TAG= printenv.py txnclose" |
25 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs |
25 > txnabort.0 = python:$TESTTMP/txnabort.checkargs.py:showargs |
26 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py txnabort" |
26 > txnabort.1 = sh -c "HG_LOCAL= HG_TAG= printenv.py txnabort" |
45 |
45 |
46 changegroup hooks can see env vars |
46 changegroup hooks can see env vars |
47 |
47 |
48 $ cat > .hg/hgrc <<EOF |
48 $ cat > .hg/hgrc <<EOF |
49 > [hooks] |
49 > [hooks] |
50 > prechangegroup = printenv.py prechangegroup |
50 > prechangegroup = sh -c "printenv.py prechangegroup" |
51 > changegroup = printenv.py changegroup |
51 > changegroup = sh -c "printenv.py changegroup" |
52 > incoming = printenv.py incoming |
52 > incoming = sh -c "printenv.py incoming" |
53 > EOF |
53 > EOF |
54 |
54 |
55 pretxncommit and commit hooks can see both parents of merge |
55 pretxncommit and commit hooks can see both parents of merge |
56 |
56 |
57 $ cd ../a |
57 $ cd ../a |
120 |
120 |
121 tag hooks can see env vars |
121 tag hooks can see env vars |
122 |
122 |
123 $ cd ../a |
123 $ cd ../a |
124 $ cat >> .hg/hgrc <<EOF |
124 $ cat >> .hg/hgrc <<EOF |
125 > pretag = printenv.py pretag |
125 > pretag = sh -c "printenv.py pretag" |
126 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py tag" |
126 > tag = sh -c "HG_PARENT1= HG_PARENT2= printenv.py tag" |
127 > EOF |
127 > EOF |
128 $ hg tag -d '3 0' a |
128 $ hg tag -d '3 0' a |
129 pretag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a |
129 pretag hook: HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a |
130 precommit hook: HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 |
130 precommit hook: HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 |
140 pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la |
140 pretag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la |
141 tag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la |
141 tag hook: HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la |
142 |
142 |
143 pretag hook can forbid tagging |
143 pretag hook can forbid tagging |
144 |
144 |
145 $ echo "pretag.forbid = printenv.py pretag.forbid 1" >> .hg/hgrc |
145 $ cat >> .hg/hgrc <<EOF |
|
146 > pretag.forbid = sh -c "printenv.py pretag.forbid 1" |
|
147 > EOF |
146 $ hg tag -d '4 0' fa |
148 $ hg tag -d '4 0' fa |
147 pretag hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa |
149 pretag hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa |
148 pretag.forbid hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa |
150 pretag.forbid hook: HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa |
149 abort: pretag.forbid hook exited with status 1 |
151 abort: pretag.forbid hook exited with status 1 |
150 [255] |
152 [255] |
155 [255] |
157 [255] |
156 |
158 |
157 pretxncommit hook can see changeset, can roll back txn, changeset no |
159 pretxncommit hook can see changeset, can roll back txn, changeset no |
158 more there after |
160 more there after |
159 |
161 |
160 $ echo "pretxncommit.forbid0 = hg tip -q" >> .hg/hgrc |
162 $ cat >> .hg/hgrc <<EOF |
161 $ echo "pretxncommit.forbid1 = printenv.py pretxncommit.forbid 1" >> .hg/hgrc |
163 > pretxncommit.forbid0 = sh -c "hg tip -q" |
|
164 > pretxncommit.forbid1 = sh -c "printenv.py pretxncommit.forbid 1" |
|
165 > EOF |
162 $ echo z > z |
166 $ echo z > z |
163 $ hg add z |
167 $ hg add z |
164 $ hg -q tip |
168 $ hg -q tip |
165 4:539e4b31b6dc |
169 4:539e4b31b6dc |
166 $ hg commit -m 'fail' -d '4 0' |
170 $ hg commit -m 'fail' -d '4 0' |
194 undo.phaseroots |
198 undo.phaseroots |
195 |
199 |
196 |
200 |
197 precommit hook can prevent commit |
201 precommit hook can prevent commit |
198 |
202 |
199 $ echo "precommit.forbid = printenv.py precommit.forbid 1" >> .hg/hgrc |
203 $ cat >> .hg/hgrc <<EOF |
|
204 > precommit.forbid = sh -c "printenv.py precommit.forbid 1" |
|
205 > EOF |
200 $ hg commit -m 'fail' -d '4 0' |
206 $ hg commit -m 'fail' -d '4 0' |
201 precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 |
207 precommit hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 |
202 precommit.forbid hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 |
208 precommit.forbid hook: HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 |
203 abort: precommit.forbid hook exited with status 1 |
209 abort: precommit.forbid hook exited with status 1 |
204 [255] |
210 [255] |
205 $ hg -q tip |
211 $ hg -q tip |
206 4:539e4b31b6dc |
212 4:539e4b31b6dc |
207 |
213 |
208 preupdate hook can prevent update |
214 preupdate hook can prevent update |
209 |
215 |
210 $ echo "preupdate = printenv.py preupdate" >> .hg/hgrc |
216 $ cat >> .hg/hgrc <<EOF |
|
217 > preupdate = sh -c "printenv.py preupdate" |
|
218 > EOF |
211 $ hg update 1 |
219 $ hg update 1 |
212 preupdate hook: HG_PARENT1=ab228980c14d |
220 preupdate hook: HG_PARENT1=ab228980c14d |
213 0 files updated, 0 files merged, 2 files removed, 0 files unresolved |
221 0 files updated, 0 files merged, 2 files removed, 0 files unresolved |
214 |
222 |
215 update hook |
223 update hook |
216 |
224 |
217 $ echo "update = printenv.py update" >> .hg/hgrc |
225 $ cat >> .hg/hgrc <<EOF |
|
226 > update = sh -c "printenv.py update" |
|
227 > EOF |
218 $ hg update |
228 $ hg update |
219 preupdate hook: HG_PARENT1=539e4b31b6dc |
229 preupdate hook: HG_PARENT1=539e4b31b6dc |
220 update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc |
230 update hook: HG_ERROR=0 HG_PARENT1=539e4b31b6dc |
221 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
231 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
222 |
232 |
223 pushkey hook |
233 pushkey hook |
224 |
234 |
225 $ echo "pushkey = printenv.py pushkey" >> .hg/hgrc |
235 $ cat >> .hg/hgrc <<EOF |
|
236 > pushkey = sh -c "printenv.py pushkey" |
|
237 > EOF |
226 $ cd ../b |
238 $ cd ../b |
227 $ hg bookmark -r null foo |
239 $ hg bookmark -r null foo |
228 $ hg push -B foo ../a |
240 $ hg push -B foo ../a |
229 pushing to ../a |
241 pushing to ../a |
230 searching for changes |
242 searching for changes |
237 [1] |
249 [1] |
238 $ cd ../a |
250 $ cd ../a |
239 |
251 |
240 listkeys hook |
252 listkeys hook |
241 |
253 |
242 $ echo "listkeys = printenv.py listkeys" >> .hg/hgrc |
254 $ cat >> .hg/hgrc <<EOF |
|
255 > listkeys = sh -c "printenv.py listkeys" |
|
256 > EOF |
243 $ hg bookmark -r null bar |
257 $ hg bookmark -r null bar |
244 pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
258 pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
245 pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
259 pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
246 txnclose hook: HG_BOOKMARK_MOVED=1 HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
260 txnclose hook: HG_BOOKMARK_MOVED=1 HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
247 $ cd ../b |
261 $ cd ../b |
253 adding remote bookmark bar |
267 adding remote bookmark bar |
254 $ cd ../a |
268 $ cd ../a |
255 |
269 |
256 test that prepushkey can prevent incoming keys |
270 test that prepushkey can prevent incoming keys |
257 |
271 |
258 $ echo "prepushkey = printenv.py prepushkey.forbid 1" >> .hg/hgrc |
272 $ cat >> .hg/hgrc <<EOF |
|
273 > prepushkey = sh -c "printenv.py prepushkey.forbid 1" |
|
274 > EOF |
259 $ cd ../b |
275 $ cd ../b |
260 $ hg bookmark -r null baz |
276 $ hg bookmark -r null baz |
261 $ hg push -B baz ../a |
277 $ hg push -B baz ../a |
262 pushing to ../a |
278 pushing to ../a |
263 searching for changes |
279 searching for changes |
271 [255] |
287 [255] |
272 $ cd ../a |
288 $ cd ../a |
273 |
289 |
274 test that prelistkeys can prevent listing keys |
290 test that prelistkeys can prevent listing keys |
275 |
291 |
276 $ echo "prelistkeys = printenv.py prelistkeys.forbid 1" >> .hg/hgrc |
292 $ cat >> .hg/hgrc <<EOF |
|
293 > prelistkeys = sh -c "printenv.py prelistkeys.forbid 1" |
|
294 > EOF |
277 $ hg bookmark -r null quux |
295 $ hg bookmark -r null quux |
278 pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
296 pretxnopen hook: HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
279 pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
297 pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_PENDING=$TESTTMP/a HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
280 txnclose hook: HG_BOOKMARK_MOVED=1 HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
298 txnclose hook: HG_BOOKMARK_MOVED=1 HG_TXNID=TXN:* HG_TXNNAME=bookmark (glob) |
281 $ cd ../b |
299 $ cd ../b |
307 incoming changes no longer there after |
325 incoming changes no longer there after |
308 |
326 |
309 $ cat > .hg/hgrc <<EOF |
327 $ cat > .hg/hgrc <<EOF |
310 > [hooks] |
328 > [hooks] |
311 > pretxnchangegroup.forbid0 = hg tip -q |
329 > pretxnchangegroup.forbid0 = hg tip -q |
312 > pretxnchangegroup.forbid1 = printenv.py pretxnchangegroup.forbid 1 |
330 > pretxnchangegroup.forbid1 = sh -c "printenv.py pretxnchangegroup.forbid 1" |
313 > EOF |
331 > EOF |
314 $ hg pull ../a |
332 $ hg pull ../a |
315 pulling from ../a |
333 pulling from ../a |
316 searching for changes |
334 searching for changes |
317 adding changesets |
335 adding changesets |
330 outgoing hooks can see env vars |
348 outgoing hooks can see env vars |
331 |
349 |
332 $ rm .hg/hgrc |
350 $ rm .hg/hgrc |
333 $ cat > ../a/.hg/hgrc <<EOF |
351 $ cat > ../a/.hg/hgrc <<EOF |
334 > [hooks] |
352 > [hooks] |
335 > preoutgoing = printenv.py preoutgoing |
353 > preoutgoing = sh -c "printenv.py preoutgoing" |
336 > outgoing = printenv.py outgoing |
354 > outgoing = sh -c "printenv.py outgoing" |
337 > EOF |
355 > EOF |
338 $ hg pull ../a |
356 $ hg pull ../a |
339 pulling from ../a |
357 pulling from ../a |
340 searching for changes |
358 searching for changes |
341 preoutgoing hook: HG_SOURCE=pull |
359 preoutgoing hook: HG_SOURCE=pull |
349 $ hg rollback |
367 $ hg rollback |
350 repository tip rolled back to revision 3 (undo pull) |
368 repository tip rolled back to revision 3 (undo pull) |
351 |
369 |
352 preoutgoing hook can prevent outgoing changes |
370 preoutgoing hook can prevent outgoing changes |
353 |
371 |
354 $ echo "preoutgoing.forbid = printenv.py preoutgoing.forbid 1" >> ../a/.hg/hgrc |
372 $ cat >> ../a/.hg/hgrc <<EOF |
|
373 > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1" |
|
374 > EOF |
355 $ hg pull ../a |
375 $ hg pull ../a |
356 pulling from ../a |
376 pulling from ../a |
357 searching for changes |
377 searching for changes |
358 preoutgoing hook: HG_SOURCE=pull |
378 preoutgoing hook: HG_SOURCE=pull |
359 preoutgoing.forbid hook: HG_SOURCE=pull |
379 preoutgoing.forbid hook: HG_SOURCE=pull |
363 outgoing hooks work for local clones |
383 outgoing hooks work for local clones |
364 |
384 |
365 $ cd .. |
385 $ cd .. |
366 $ cat > a/.hg/hgrc <<EOF |
386 $ cat > a/.hg/hgrc <<EOF |
367 > [hooks] |
387 > [hooks] |
368 > preoutgoing = printenv.py preoutgoing |
388 > preoutgoing = sh -c "printenv.py preoutgoing" |
369 > outgoing = printenv.py outgoing |
389 > outgoing = sh -c "printenv.py outgoing" |
370 > EOF |
390 > EOF |
371 $ hg clone a c |
391 $ hg clone a c |
372 preoutgoing hook: HG_SOURCE=clone |
392 preoutgoing hook: HG_SOURCE=clone |
373 outgoing hook: HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone |
393 outgoing hook: HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone |
374 updating to branch default |
394 updating to branch default |
375 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
395 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
376 $ rm -rf c |
396 $ rm -rf c |
377 |
397 |
378 preoutgoing hook can prevent outgoing changes for local clones |
398 preoutgoing hook can prevent outgoing changes for local clones |
379 |
399 |
380 $ echo "preoutgoing.forbid = printenv.py preoutgoing.forbid 1" >> a/.hg/hgrc |
400 $ cat >> a/.hg/hgrc <<EOF |
|
401 > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1" |
|
402 > EOF |
381 $ hg clone a zzz |
403 $ hg clone a zzz |
382 preoutgoing hook: HG_SOURCE=clone |
404 preoutgoing hook: HG_SOURCE=clone |
383 preoutgoing.forbid hook: HG_SOURCE=clone |
405 preoutgoing.forbid hook: HG_SOURCE=clone |
384 abort: preoutgoing.forbid hook exited with status 1 |
406 abort: preoutgoing.forbid hook exited with status 1 |
385 [255] |
407 [255] |
748 This also creates the `to` repo for the next test block. |
770 This also creates the `to` repo for the next test block. |
749 |
771 |
750 $ cd .. |
772 $ cd .. |
751 $ cat << EOF >> hgrc-with-post-init-hook |
773 $ cat << EOF >> hgrc-with-post-init-hook |
752 > [hooks] |
774 > [hooks] |
753 > post-init = printenv.py post-init |
775 > post-init = sh -c "printenv.py post-init" |
754 > EOF |
776 > EOF |
755 $ HGRCPATH=hgrc-with-post-init-hook hg init to |
777 $ HGRCPATH=hgrc-with-post-init-hook hg init to |
756 post-init hook: HG_ARGS=init to HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0 |
778 post-init hook: HG_ARGS=init to HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0 |
757 |
779 |
758 new commits must be visible in pretxnchangegroup (issue3428) |
780 new commits must be visible in pretxnchangegroup (issue3428) |