tests/test-hook.t
branchstable
changeset 30234 34a5f6c66bc5
parent 29954 769aee32fae0
child 31054 59e69ed81776
equal deleted inserted replaced
30233:3afde791dce1 30234:34a5f6c66bc5
    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
   292   $ cd ../b
   310   $ cd ../b
   293   $ hg -q tip
   311   $ hg -q tip
   294   3:07f3376c1e65
   312   3:07f3376c1e65
   295   $ cat > .hg/hgrc <<EOF
   313   $ cat > .hg/hgrc <<EOF
   296   > [hooks]
   314   > [hooks]
   297   > prechangegroup.forbid = printenv.py prechangegroup.forbid 1
   315   > prechangegroup.forbid = sh -c "printenv.py prechangegroup.forbid 1"
   298   > EOF
   316   > EOF
   299   $ hg pull ../a
   317   $ hg pull ../a
   300   pulling from ../a
   318   pulling from ../a
   301   searching for changes
   319   searching for changes
   302   prechangegroup.forbid hook: HG_SOURCE=pull HG_TXNID=TXN:* HG_URL=file:$TESTTMP/a (glob)
   320   prechangegroup.forbid hook: HG_SOURCE=pull HG_TXNID=TXN:* HG_URL=file:$TESTTMP/a (glob)
   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)