tests/test-hook.t
changeset 31747 aff7b32b3c05
parent 31746 0fa30fbccc34
child 31767 6c800688afe1
equal deleted inserted replaced
31746:0fa30fbccc34 31747:aff7b32b3c05
    27   > txnclose.checklock = sh -c "hg debuglock > /dev/null"
    27   > txnclose.checklock = sh -c "hg debuglock > /dev/null"
    28   > EOF
    28   > EOF
    29   $ echo a > a
    29   $ echo a > a
    30   $ hg add a
    30   $ hg add a
    31   $ hg commit -m a
    31   $ hg commit -m a
    32   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=0000000000000000000000000000000000000000
    32   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=0000000000000000000000000000000000000000
    33   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    33   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    34   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 HG_PENDING=$TESTTMP/a
    34   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000 HG_PENDING=$TESTTMP/a
    35   0:cb9a9f314b8b
    35   0:cb9a9f314b8b
    36   pretxnclose hook: HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    36   pretxnclose hook: HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    37   txnclose hook: HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    37   txnclose hook: HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_PHASES_MOVED=1 HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    38   commit hook: HG_HOOKTYPE=commit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000
    38   commit hook: HG_HOOKNAME=commit HG_HOOKTYPE=commit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000
    39   commit.b hook: HG_HOOKTYPE=commit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000
    39   commit.b hook: HG_HOOKNAME=commit.b HG_HOOKTYPE=commit HG_NODE=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PARENT1=0000000000000000000000000000000000000000
    40 
    40 
    41   $ hg clone . ../b
    41   $ hg clone . ../b
    42   updating to branch default
    42   updating to branch default
    43   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    43   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    44   $ cd ../b
    44   $ cd ../b
    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
    58   $ echo b >> a
    58   $ echo b >> a
    59   $ hg commit -m a1 -d "1 0"
    59   $ hg commit -m a1 -d "1 0"
    60   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    60   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    61   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    61   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    62   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a
    62   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a
    63   1:ab228980c14d
    63   1:ab228980c14d
    64   pretxnclose hook: HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    64   pretxnclose hook: HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    65   txnclose hook: HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    65   txnclose hook: HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    66   commit hook: HG_HOOKTYPE=commit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    66   commit hook: HG_HOOKNAME=commit HG_HOOKTYPE=commit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    67   commit.b hook: HG_HOOKTYPE=commit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    67   commit.b hook: HG_HOOKNAME=commit.b HG_HOOKTYPE=commit HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    68   $ hg update -C 0
    68   $ hg update -C 0
    69   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    69   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    70   $ echo b > b
    70   $ echo b > b
    71   $ hg add b
    71   $ hg add b
    72   $ hg commit -m b -d '1 0'
    72   $ hg commit -m b -d '1 0'
    73   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    73   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    74   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    74   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    75   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a
    75   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b HG_PENDING=$TESTTMP/a
    76   2:ee9deb46ab31
    76   2:ee9deb46ab31
    77   pretxnclose hook: HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    77   pretxnclose hook: HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    78   created new head
    78   created new head
    79   txnclose hook: HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    79   txnclose hook: HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    80   commit hook: HG_HOOKTYPE=commit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    80   commit hook: HG_HOOKNAME=commit HG_HOOKTYPE=commit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    81   commit.b hook: HG_HOOKTYPE=commit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    81   commit.b hook: HG_HOOKNAME=commit.b HG_HOOKTYPE=commit HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT1=cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
    82   $ hg merge 1
    82   $ hg merge 1
    83   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    83   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
    84   (branch merge, don't forget to commit)
    84   (branch merge, don't forget to commit)
    85   $ hg commit -m merge -d '2 0'
    85   $ hg commit -m merge -d '2 0'
    86   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    86   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    87   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    87   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    88   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd HG_PENDING=$TESTTMP/a
    88   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd HG_PENDING=$TESTTMP/a
    89   3:07f3376c1e65
    89   3:07f3376c1e65
    90   pretxnclose hook: HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    90   pretxnclose hook: HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    91   txnclose hook: HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    91   txnclose hook: HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
    92   commit hook: HG_HOOKTYPE=commit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    92   commit hook: HG_HOOKNAME=commit HG_HOOKTYPE=commit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    93   commit.b hook: HG_HOOKTYPE=commit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    93   commit.b hook: HG_HOOKNAME=commit.b HG_HOOKTYPE=commit HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PARENT1=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_PARENT2=ab228980c14deea8b9555d91c9581127383e40fd
    94 
    94 
    95 test generic hooks
    95 test generic hooks
    96 
    96 
    97   $ hg id
    97   $ hg id
    98   pre-identify hook: HG_ARGS=id HG_HOOKTYPE=pre-identify HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None} HG_PATS=[]
    98   pre-identify hook: HG_ARGS=id HG_HOOKNAME=pre-identify HG_HOOKTYPE=pre-identify HG_OPTS={'bookmarks': None, 'branch': None, 'id': None, 'insecure': None, 'num': None, 'remotecmd': '', 'rev': '', 'ssh': '', 'tags': None} HG_PATS=[]
    99   abort: pre-identify hook exited with status 1
    99   abort: pre-identify hook exited with status 1
   100   [255]
   100   [255]
   101   $ hg cat b
   101   $ hg cat b
   102   pre-cat hook: HG_ARGS=cat b HG_HOOKTYPE=pre-cat HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b']
   102   pre-cat hook: HG_ARGS=cat b HG_HOOKNAME=pre-cat HG_HOOKTYPE=pre-cat HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b']
   103   b
   103   b
   104   post-cat hook: HG_ARGS=cat b HG_HOOKTYPE=post-cat HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] HG_RESULT=0
   104   post-cat hook: HG_ARGS=cat b HG_HOOKNAME=post-cat HG_HOOKTYPE=post-cat HG_OPTS={'decode': None, 'exclude': [], 'include': [], 'output': '', 'rev': ''} HG_PATS=['b'] HG_RESULT=0
   105 
   105 
   106   $ cd ../b
   106   $ cd ../b
   107   $ hg pull ../a
   107   $ hg pull ../a
   108   pulling from ../a
   108   pulling from ../a
   109   searching for changes
   109   searching for changes
   110   prechangegroup hook: HG_HOOKTYPE=prechangegroup HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   110   prechangegroup hook: HG_HOOKNAME=prechangegroup HG_HOOKTYPE=prechangegroup HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   111   adding changesets
   111   adding changesets
   112   adding manifests
   112   adding manifests
   113   adding file changes
   113   adding file changes
   114   added 3 changesets with 2 changes to 2 files
   114   added 3 changesets with 2 changes to 2 files
   115   changegroup hook: HG_HOOKTYPE=changegroup HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   115   changegroup hook: HG_HOOKNAME=changegroup HG_HOOKTYPE=changegroup HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_NODE_LAST=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   116   incoming hook: HG_HOOKTYPE=incoming HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   116   incoming hook: HG_HOOKNAME=incoming HG_HOOKTYPE=incoming HG_NODE=ab228980c14deea8b9555d91c9581127383e40fd HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   117   incoming hook: HG_HOOKTYPE=incoming HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   117   incoming hook: HG_HOOKNAME=incoming HG_HOOKTYPE=incoming HG_NODE=ee9deb46ab31e4cc3310f3cf0c3d668e4d8fffc2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   118   incoming hook: HG_HOOKTYPE=incoming HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   118   incoming hook: HG_HOOKNAME=incoming HG_HOOKTYPE=incoming HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   119   (run 'hg update' to get a working copy)
   119   (run 'hg update' to get a working copy)
   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 = sh -c "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_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a
   129   pretag hook: HG_HOOKNAME=pretag HG_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a
   130   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   130   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   131   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   131   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   132   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PENDING=$TESTTMP/a
   132   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2 HG_PENDING=$TESTTMP/a
   133   4:539e4b31b6dc
   133   4:539e4b31b6dc
   134   pretxnclose hook: HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   134   pretxnclose hook: HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   135   tag hook: HG_HOOKTYPE=tag HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a
   135   tag hook: HG_HOOKNAME=tag HG_HOOKTYPE=tag HG_LOCAL=0 HG_NODE=07f3376c1e655977439df2a814e3cc14b27abac2 HG_TAG=a
   136   txnclose hook: HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   136   txnclose hook: HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   137   commit hook: HG_HOOKTYPE=commit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   137   commit hook: HG_HOOKNAME=commit HG_HOOKTYPE=commit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   138   commit.b hook: HG_HOOKTYPE=commit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   138   commit.b hook: HG_HOOKNAME=commit.b HG_HOOKTYPE=commit HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PARENT1=07f3376c1e655977439df2a814e3cc14b27abac2
   139   $ hg tag -l la
   139   $ hg tag -l la
   140   pretag hook: HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la
   140   pretag hook: HG_HOOKNAME=pretag HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la
   141   tag hook: HG_HOOKTYPE=tag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=la
   141   tag hook: HG_HOOKNAME=tag HG_HOOKTYPE=tag 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   $ cat >> .hg/hgrc <<EOF
   145   $ cat >> .hg/hgrc <<EOF
   146   > pretag.forbid = sh -c "printenv.py pretag.forbid 1"
   146   > pretag.forbid = sh -c "printenv.py pretag.forbid 1"
   147   > EOF
   147   > EOF
   148   $ hg tag -d '4 0' fa
   148   $ hg tag -d '4 0' fa
   149   pretag hook: HG_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
   149   pretag hook: HG_HOOKNAME=pretag HG_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
   150   pretag.forbid hook: HG_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
   150   pretag.forbid hook: HG_HOOKNAME=pretag.forbid HG_HOOKTYPE=pretag HG_LOCAL=0 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fa
   151   abort: pretag.forbid hook exited with status 1
   151   abort: pretag.forbid hook exited with status 1
   152   [255]
   152   [255]
   153   $ hg tag -l fla
   153   $ hg tag -l fla
   154   pretag hook: HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla
   154   pretag hook: HG_HOOKNAME=pretag HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla
   155   pretag.forbid hook: HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla
   155   pretag.forbid hook: HG_HOOKNAME=pretag.forbid HG_HOOKTYPE=pretag HG_LOCAL=1 HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_TAG=fla
   156   abort: pretag.forbid hook exited with status 1
   156   abort: pretag.forbid hook exited with status 1
   157   [255]
   157   [255]
   158 
   158 
   159 pretxncommit hook can see changeset, can roll back txn, changeset no
   159 pretxncommit hook can see changeset, can roll back txn, changeset no
   160 more there after
   160 more there after
   166   $ echo z > z
   166   $ echo z > z
   167   $ hg add z
   167   $ hg add z
   168   $ hg -q tip
   168   $ hg -q tip
   169   4:539e4b31b6dc
   169   4:539e4b31b6dc
   170   $ hg commit -m 'fail' -d '4 0'
   170   $ hg commit -m 'fail' -d '4 0'
   171   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   171   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   172   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   172   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   173   pretxncommit hook: HG_HOOKTYPE=pretxncommit HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a
   173   pretxncommit hook: HG_HOOKNAME=pretxncommit HG_HOOKTYPE=pretxncommit HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a
   174   5:6f611f8018c1
   174   5:6f611f8018c1
   175   5:6f611f8018c1
   175   5:6f611f8018c1
   176   pretxncommit.forbid hook: HG_HOOKTYPE=pretxncommit HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a
   176   pretxncommit.forbid hook: HG_HOOKNAME=pretxncommit.forbid1 HG_HOOKTYPE=pretxncommit HG_NODE=6f611f8018c10e827fee6bd2bc807f937e761567 HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/a
   177   transaction abort!
   177   transaction abort!
   178   txnabort python hook: txnid,txnname
   178   txnabort python hook: txnid,txnname
   179   txnabort hook: HG_HOOKTYPE=txnabort HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   179   txnabort hook: HG_HOOKNAME=txnabort.1 HG_HOOKTYPE=txnabort HG_TXNID=TXN:$ID$ HG_TXNNAME=commit
   180   rollback completed
   180   rollback completed
   181   abort: pretxncommit.forbid1 hook exited with status 1
   181   abort: pretxncommit.forbid1 hook exited with status 1
   182   [255]
   182   [255]
   183   $ hg -q tip
   183   $ hg -q tip
   184   4:539e4b31b6dc
   184   4:539e4b31b6dc
   202 
   202 
   203   $ cat >> .hg/hgrc <<EOF
   203   $ cat >> .hg/hgrc <<EOF
   204   > precommit.forbid = sh -c "printenv.py precommit.forbid 1"
   204   > precommit.forbid = sh -c "printenv.py precommit.forbid 1"
   205   > EOF
   205   > EOF
   206   $ hg commit -m 'fail' -d '4 0'
   206   $ hg commit -m 'fail' -d '4 0'
   207   precommit hook: HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   207   precommit hook: HG_HOOKNAME=precommit HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   208   precommit.forbid hook: HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   208   precommit.forbid hook: HG_HOOKNAME=precommit.forbid HG_HOOKTYPE=precommit HG_PARENT1=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10
   209   abort: precommit.forbid hook exited with status 1
   209   abort: precommit.forbid hook exited with status 1
   210   [255]
   210   [255]
   211   $ hg -q tip
   211   $ hg -q tip
   212   4:539e4b31b6dc
   212   4:539e4b31b6dc
   213 
   213 
   215 
   215 
   216   $ cat >> .hg/hgrc <<EOF
   216   $ cat >> .hg/hgrc <<EOF
   217   > preupdate = sh -c "printenv.py preupdate"
   217   > preupdate = sh -c "printenv.py preupdate"
   218   > EOF
   218   > EOF
   219   $ hg update 1
   219   $ hg update 1
   220   preupdate hook: HG_HOOKTYPE=preupdate HG_PARENT1=ab228980c14d
   220   preupdate hook: HG_HOOKNAME=preupdate HG_HOOKTYPE=preupdate HG_PARENT1=ab228980c14d
   221   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
   222 
   222 
   223 update hook
   223 update hook
   224 
   224 
   225   $ cat >> .hg/hgrc <<EOF
   225   $ cat >> .hg/hgrc <<EOF
   226   > update = sh -c "printenv.py update"
   226   > update = sh -c "printenv.py update"
   227   > EOF
   227   > EOF
   228   $ hg update
   228   $ hg update
   229   preupdate hook: HG_HOOKTYPE=preupdate HG_PARENT1=539e4b31b6dc
   229   preupdate hook: HG_HOOKNAME=preupdate HG_HOOKTYPE=preupdate HG_PARENT1=539e4b31b6dc
   230   update hook: HG_ERROR=0 HG_HOOKTYPE=update HG_PARENT1=539e4b31b6dc
   230   update hook: HG_ERROR=0 HG_HOOKNAME=update HG_HOOKTYPE=update HG_PARENT1=539e4b31b6dc
   231   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
   232 
   232 
   233 pushkey hook
   233 pushkey hook
   234 
   234 
   235   $ cat >> .hg/hgrc <<EOF
   235   $ cat >> .hg/hgrc <<EOF
   239   $ hg bookmark -r null foo
   239   $ hg bookmark -r null foo
   240   $ hg push -B foo ../a
   240   $ hg push -B foo ../a
   241   pushing to ../a
   241   pushing to ../a
   242   searching for changes
   242   searching for changes
   243   no changes found
   243   no changes found
   244   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
   244   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
   245   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
   245   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
   246   pushkey hook: HG_HOOKTYPE=pushkey HG_KEY=foo HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_RET=1
   246   pushkey hook: HG_HOOKNAME=pushkey HG_HOOKTYPE=pushkey HG_KEY=foo HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_RET=1
   247   txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKTYPE=txnclose HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
   247   txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_TXNNAME=push HG_URL=file:$TESTTMP/a
   248   exporting bookmark foo
   248   exporting bookmark foo
   249   [1]
   249   [1]
   250   $ cd ../a
   250   $ cd ../a
   251 
   251 
   252 listkeys hook
   252 listkeys hook
   253 
   253 
   254   $ cat >> .hg/hgrc <<EOF
   254   $ cat >> .hg/hgrc <<EOF
   255   > listkeys = sh -c "printenv.py listkeys"
   255   > listkeys = sh -c "printenv.py listkeys"
   256   > EOF
   256   > EOF
   257   $ hg bookmark -r null bar
   257   $ hg bookmark -r null bar
   258   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   258   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   259   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   259   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   260   txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   260   txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   261   $ cd ../b
   261   $ cd ../b
   262   $ hg pull -B bar ../a
   262   $ hg pull -B bar ../a
   263   pulling from ../a
   263   pulling from ../a
   264   listkeys hook: HG_HOOKTYPE=listkeys HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
   264   listkeys hook: HG_HOOKNAME=listkeys HG_HOOKTYPE=listkeys HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
   265   no changes found
   265   no changes found
   266   listkeys hook: HG_HOOKTYPE=listkeys HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
   266   listkeys hook: HG_HOOKNAME=listkeys HG_HOOKTYPE=listkeys HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
   267   adding remote bookmark bar
   267   adding remote bookmark bar
   268   $ cd ../a
   268   $ cd ../a
   269 
   269 
   270 test that prepushkey can prevent incoming keys
   270 test that prepushkey can prevent incoming keys
   271 
   271 
   275   $ cd ../b
   275   $ cd ../b
   276   $ hg bookmark -r null baz
   276   $ hg bookmark -r null baz
   277   $ hg push -B baz ../a
   277   $ hg push -B baz ../a
   278   pushing to ../a
   278   pushing to ../a
   279   searching for changes
   279   searching for changes
   280   listkeys hook: HG_HOOKTYPE=listkeys HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
   280   listkeys hook: HG_HOOKNAME=listkeys HG_HOOKTYPE=listkeys HG_NAMESPACE=phases HG_VALUES={'cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b': '1', 'publishing': 'True'}
   281   listkeys hook: HG_HOOKTYPE=listkeys HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
   281   listkeys hook: HG_HOOKNAME=listkeys HG_HOOKTYPE=listkeys HG_NAMESPACE=bookmarks HG_VALUES={'bar': '0000000000000000000000000000000000000000', 'foo': '0000000000000000000000000000000000000000'}
   282   no changes found
   282   no changes found
   283   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
   283   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=push
   284   prepushkey.forbid hook: HG_BUNDLE2=1 HG_HOOKTYPE=prepushkey HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   284   prepushkey.forbid hook: HG_BUNDLE2=1 HG_HOOKNAME=prepushkey HG_HOOKTYPE=prepushkey HG_KEY=baz HG_NAMESPACE=bookmarks HG_NEW=0000000000000000000000000000000000000000 HG_SOURCE=push HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   285   pushkey-abort: prepushkey hook exited with status 1
   285   pushkey-abort: prepushkey hook exited with status 1
   286   abort: exporting bookmark baz failed!
   286   abort: exporting bookmark baz failed!
   287   [255]
   287   [255]
   288   $ cd ../a
   288   $ cd ../a
   289 
   289 
   291 
   291 
   292   $ cat >> .hg/hgrc <<EOF
   292   $ cat >> .hg/hgrc <<EOF
   293   > prelistkeys = sh -c "printenv.py prelistkeys.forbid 1"
   293   > prelistkeys = sh -c "printenv.py prelistkeys.forbid 1"
   294   > EOF
   294   > EOF
   295   $ hg bookmark -r null quux
   295   $ hg bookmark -r null quux
   296   pretxnopen hook: HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   296   pretxnopen hook: HG_HOOKNAME=pretxnopen HG_HOOKTYPE=pretxnopen HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   297   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   297   pretxnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=pretxnclose HG_HOOKTYPE=pretxnclose HG_PENDING=$TESTTMP/a HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   298   txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   298   txnclose hook: HG_BOOKMARK_MOVED=1 HG_HOOKNAME=txnclose HG_HOOKTYPE=txnclose HG_TXNID=TXN:$ID$ HG_TXNNAME=bookmark
   299   $ cd ../b
   299   $ cd ../b
   300   $ hg pull -B quux ../a
   300   $ hg pull -B quux ../a
   301   pulling from ../a
   301   pulling from ../a
   302   prelistkeys.forbid hook: HG_HOOKTYPE=prelistkeys HG_NAMESPACE=bookmarks
   302   prelistkeys.forbid hook: HG_HOOKNAME=prelistkeys HG_HOOKTYPE=prelistkeys HG_NAMESPACE=bookmarks
   303   abort: prelistkeys hook exited with status 1
   303   abort: prelistkeys hook exited with status 1
   304   [255]
   304   [255]
   305   $ cd ../a
   305   $ cd ../a
   306   $ rm .hg/hgrc
   306   $ rm .hg/hgrc
   307 
   307 
   315   > prechangegroup.forbid = sh -c "printenv.py prechangegroup.forbid 1"
   315   > prechangegroup.forbid = sh -c "printenv.py prechangegroup.forbid 1"
   316   > EOF
   316   > EOF
   317   $ hg pull ../a
   317   $ hg pull ../a
   318   pulling from ../a
   318   pulling from ../a
   319   searching for changes
   319   searching for changes
   320   prechangegroup.forbid hook: HG_HOOKTYPE=prechangegroup HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   320   prechangegroup.forbid hook: HG_HOOKNAME=prechangegroup.forbid HG_HOOKTYPE=prechangegroup HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   321   abort: prechangegroup.forbid hook exited with status 1
   321   abort: prechangegroup.forbid hook exited with status 1
   322   [255]
   322   [255]
   323 
   323 
   324 pretxnchangegroup hook can see incoming changes, can roll back txn,
   324 pretxnchangegroup hook can see incoming changes, can roll back txn,
   325 incoming changes no longer there after
   325 incoming changes no longer there after
   335   adding changesets
   335   adding changesets
   336   adding manifests
   336   adding manifests
   337   adding file changes
   337   adding file changes
   338   added 1 changesets with 1 changes to 1 files
   338   added 1 changesets with 1 changes to 1 files
   339   4:539e4b31b6dc
   339   4:539e4b31b6dc
   340   pretxnchangegroup.forbid hook: HG_HOOKTYPE=pretxnchangegroup HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/b HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   340   pretxnchangegroup.forbid hook: HG_HOOKNAME=pretxnchangegroup.forbid1 HG_HOOKTYPE=pretxnchangegroup HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_NODE_LAST=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_PENDING=$TESTTMP/b HG_SOURCE=pull HG_TXNID=TXN:$ID$ HG_URL=file:$TESTTMP/a
   341   transaction abort!
   341   transaction abort!
   342   rollback completed
   342   rollback completed
   343   abort: pretxnchangegroup.forbid1 hook exited with status 1
   343   abort: pretxnchangegroup.forbid1 hook exited with status 1
   344   [255]
   344   [255]
   345   $ hg -q tip
   345   $ hg -q tip
   354   > outgoing = sh -c "printenv.py outgoing"
   354   > outgoing = sh -c "printenv.py outgoing"
   355   > EOF
   355   > EOF
   356   $ hg pull ../a
   356   $ hg pull ../a
   357   pulling from ../a
   357   pulling from ../a
   358   searching for changes
   358   searching for changes
   359   preoutgoing hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   359   preoutgoing hook: HG_HOOKNAME=preoutgoing HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   360   outgoing hook: HG_HOOKTYPE=outgoing HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_SOURCE=pull
   360   outgoing hook: HG_HOOKNAME=outgoing HG_HOOKTYPE=outgoing HG_NODE=539e4b31b6dc99b3cfbaa6b53cbc1c1f9a1e3a10 HG_SOURCE=pull
   361   adding changesets
   361   adding changesets
   362   adding manifests
   362   adding manifests
   363   adding file changes
   363   adding file changes
   364   added 1 changesets with 1 changes to 1 files
   364   added 1 changesets with 1 changes to 1 files
   365   adding remote bookmark quux
   365   adding remote bookmark quux
   373   > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
   373   > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
   374   > EOF
   374   > EOF
   375   $ hg pull ../a
   375   $ hg pull ../a
   376   pulling from ../a
   376   pulling from ../a
   377   searching for changes
   377   searching for changes
   378   preoutgoing hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   378   preoutgoing hook: HG_HOOKNAME=preoutgoing HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   379   preoutgoing.forbid hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   379   preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid HG_HOOKTYPE=preoutgoing HG_SOURCE=pull
   380   abort: preoutgoing.forbid hook exited with status 1
   380   abort: preoutgoing.forbid hook exited with status 1
   381   [255]
   381   [255]
   382 
   382 
   383 outgoing hooks work for local clones
   383 outgoing hooks work for local clones
   384 
   384 
   387   > [hooks]
   387   > [hooks]
   388   > preoutgoing = sh -c "printenv.py preoutgoing"
   388   > preoutgoing = sh -c "printenv.py preoutgoing"
   389   > outgoing = sh -c "printenv.py outgoing"
   389   > outgoing = sh -c "printenv.py outgoing"
   390   > EOF
   390   > EOF
   391   $ hg clone a c
   391   $ hg clone a c
   392   preoutgoing hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   392   preoutgoing hook: HG_HOOKNAME=preoutgoing HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   393   outgoing hook: HG_HOOKTYPE=outgoing HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone
   393   outgoing hook: HG_HOOKNAME=outgoing HG_HOOKTYPE=outgoing HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone
   394   updating to branch default
   394   updating to branch default
   395   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
   396   $ rm -rf c
   396   $ rm -rf c
   397 
   397 
   398 preoutgoing hook can prevent outgoing changes for local clones
   398 preoutgoing hook can prevent outgoing changes for local clones
   399 
   399 
   400   $ cat >> a/.hg/hgrc <<EOF
   400   $ cat >> a/.hg/hgrc <<EOF
   401   > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
   401   > preoutgoing.forbid = sh -c "printenv.py preoutgoing.forbid 1"
   402   > EOF
   402   > EOF
   403   $ hg clone a zzz
   403   $ hg clone a zzz
   404   preoutgoing hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   404   preoutgoing hook: HG_HOOKNAME=preoutgoing HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   405   preoutgoing.forbid hook: HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   405   preoutgoing.forbid hook: HG_HOOKNAME=preoutgoing.forbid HG_HOOKTYPE=preoutgoing HG_SOURCE=clone
   406   abort: preoutgoing.forbid hook exited with status 1
   406   abort: preoutgoing.forbid hook exited with status 1
   407   [255]
   407   [255]
   408 
   408 
   409   $ cd "$TESTTMP/b"
   409   $ cd "$TESTTMP/b"
   410 
   410 
   773   $ cat << EOF >> hgrc-with-post-init-hook
   773   $ cat << EOF >> hgrc-with-post-init-hook
   774   > [hooks]
   774   > [hooks]
   775   > post-init = sh -c "printenv.py post-init"
   775   > post-init = sh -c "printenv.py post-init"
   776   > EOF
   776   > EOF
   777   $ HGRCPATH=hgrc-with-post-init-hook hg init to
   777   $ HGRCPATH=hgrc-with-post-init-hook hg init to
   778   post-init hook: HG_ARGS=init to HG_HOOKTYPE=post-init HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0
   778   post-init hook: HG_ARGS=init to HG_HOOKNAME=post-init HG_HOOKTYPE=post-init HG_OPTS={'insecure': None, 'remotecmd': '', 'ssh': ''} HG_PATS=['to'] HG_RESULT=0
   779 
   779 
   780 new commits must be visible in pretxnchangegroup (issue3428)
   780 new commits must be visible in pretxnchangegroup (issue3428)
   781 
   781 
   782   $ echo '[hooks]' >> to/.hg/hgrc
   782   $ echo '[hooks]' >> to/.hg/hgrc
   783   $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc
   783   $ echo 'prechangegroup = hg --traceback tip' >> to/.hg/hgrc