tests/test-pending.t
author Adrian Buehlmann <adrian@cadifra.com>
Thu, 02 Jun 2011 00:33:33 +0200
changeset 14518 a67e866f46f9
parent 13237 c046978cc0a9
child 15519 bb9ad375b51c
permissions -rw-r--r--
workingctx: eliminate remove function Inlining it into it's last remaining call place in cmdutil.copy. Note that cmdutil.copy is called with the wlock already held, so no additional locking is needed to call util.unlinkpath. We do not need to wrap the util.unlinkpath call into a try block, because at that point we already know whether abssrc exists or not -- thanks to the preceding util.copyfile call. Adding a new local 'srcexists' in cmdutil.copy for that purpose.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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