tests/test-bundle2-pushback.t
author Pierre-Yves David <pierre-yves.david@fb.com>
Wed, 15 Apr 2015 10:36:21 -0400
changeset 24754 5dc5cd7abbf5
parent 24751 dc4daf028f9c
child 25423 525fbf24b51b
permissions -rw-r--r--
push: acquire local 'wlock' if "pushback" is expected (BC) (issue4596) If the client allows "pushback", the bundle2 served back by the server may contains parts that will write to the repository. Such parts may require the 'wlock' (eg: bookmark) so we acquire it in advance to make sure it got acquired before the 'lock'.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     1
  $ cat > bundle2.py << EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     2
  > """A small extension to test bundle2 pushback parts.
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     3
  > Current bundle2 implementation doesn't provide a way to generate those
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     4
  > parts, so they must be created by extensions.
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     5
  > """
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     6
  > from mercurial import bundle2, pushkey, exchange, util
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     7
  > def _newhandlechangegroup(op, inpart):
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
     8
  >     """This function wraps the changegroup part handler for getbundle.
24686
e0e28e910fa3 bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23439
diff changeset
     9
  >     It issues an additional pushkey part to send a new
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    10
  >     bookmark back to the client"""
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    11
  >     result = bundle2.handlechangegroup(op, inpart)
24686
e0e28e910fa3 bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23439
diff changeset
    12
  >     if 'pushback' in op.reply.capabilities:
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    13
  >         params = {'namespace': 'bookmarks',
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    14
  >                   'key': 'new-server-mark',
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    15
  >                   'old': '',
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    16
  >                   'new': 'tip'}
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    17
  >         encodedparams = [(k, pushkey.encode(v)) for (k,v) in params.items()]
24686
e0e28e910fa3 bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23439
diff changeset
    18
  >         op.reply.newpart('pushkey', mandatoryparams=encodedparams)
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    19
  >     else:
24686
e0e28e910fa3 bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23439
diff changeset
    20
  >         op.reply.newpart('output', data='pushback not enabled')
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    21
  >     return result
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    22
  > _newhandlechangegroup.params = bundle2.handlechangegroup.params
24686
e0e28e910fa3 bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23439
diff changeset
    23
  > bundle2.parthandlermapping['changegroup'] = _newhandlechangegroup
23439
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    24
  > EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    25
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    26
  $ cat >> $HGRCPATH <<EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    27
  > [ui]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    28
  > ssh = python "$TESTDIR/dummyssh"
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    29
  > username = nobody <no.reply@example.com>
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    30
  > 
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    31
  > [alias]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    32
  > tglog = log -G -T "{desc} [{phase}:{node|short}]"
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    33
  > EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    34
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    35
Set up server repository
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    36
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    37
  $ hg init server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    38
  $ cd server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    39
  $ echo c0 > f0
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    40
  $ hg commit -Am 0
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    41
  adding f0
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    42
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    43
Set up client repository
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    44
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    45
  $ cd ..
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    46
  $ hg clone ssh://user@dummy/server client -q
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    47
  $ cd client
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    48
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    49
Enable extension
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    50
  $ cat >> $HGRCPATH <<EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    51
  > [extensions]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    52
  > bundle2=$TESTTMP/bundle2.py
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    53
  > [experimental]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    54
  > bundle2-exp = True
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    55
  > EOF
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    56
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    57
Without config
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    58
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    59
  $ cd ../client
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    60
  $ echo c1 > f1
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    61
  $ hg commit -Am 1
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    62
  adding f1
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    63
  $ hg push
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    64
  pushing to ssh://user@dummy/server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    65
  searching for changes
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    66
  remote: pushback not enabled
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    67
  remote: adding changesets
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    68
  remote: adding manifests
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    69
  remote: adding file changes
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    70
  remote: added 1 changesets with 1 changes to 1 files
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    71
  $ hg bookmark
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    72
  no bookmarks set
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    73
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    74
  $ cd ../server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    75
  $ hg tglog
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    76
  o  1 [public:2b9c7234e035]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    77
  |
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    78
  @  0 [public:6cee5c8f3e5b]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    79
  
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    80
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    81
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    82
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    83
With config
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    84
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    85
  $ cd ../client
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    86
  $ echo '[experimental]' >> .hg/hgrc
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    87
  $ echo 'bundle2.pushback = True' >> .hg/hgrc
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    88
  $ echo c2 > f2
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    89
  $ hg commit -Am 2
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    90
  adding f2
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    91
  $ hg push
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    92
  pushing to ssh://user@dummy/server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    93
  searching for changes
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    94
  remote: adding changesets
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    95
  remote: adding manifests
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    96
  remote: adding file changes
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    97
  remote: added 1 changesets with 1 changes to 1 files
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    98
  $ hg bookmark
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
    99
     new-server-mark           2:0a76dfb2e179
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   100
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   101
  $ cd ../server
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   102
  $ hg tglog
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   103
  o  2 [public:0a76dfb2e179]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   104
  |
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   105
  o  1 [public:2b9c7234e035]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   106
  |
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   107
  @  0 [public:6cee5c8f3e5b]
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   108
  
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   109
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   110
743736fc7c41 bundle2-push: provide transaction to reply unbundler
Eric Sumner <ericsumner@fb.com>
parents:
diff changeset
   111