tests/test-push-checkheads-pruned-B7.t
author Gregory Szorc <gregory.szorc@gmail.com>
Fri, 13 Apr 2018 10:23:05 -0700
changeset 37629 fa0382088993
parent 35393 4441705b7111
child 42893 34a46d48d24e
permissions -rw-r--r--
repository: define new interface for running commands Today, the peer interface exposes methods for each command that can be executed. In addition, there is an iterbatch() API that allows commands to be issued in batches and provides an iterator over the results. This is a glorified wrapper around the "batch" wire command. Wire protocol version 2 supports nicer things (such as batching any command and out-of-order replies). It will require a more flexible API for executing commands. This commit introduces a new peer interface for making command requests. In the new world, you can't simply call a method on the peer to execute a command: you need to obtain an object to be used for executing commands. That object can be used to issue a single command or it can batch multiple requests. In the case of full duplex peers, the command may even be sent out over the wire immediately. There are no per-command methods. Instead, there is a generic method to call a command. The implementation can then perform domain specific processing for specific commands. This includes passing data via a specially named argument. Arguments are also passed as a dictionary instead of using **kwargs. While **kwargs is nicer to use, we've historically gotten into trouble using it because there will inevitably be a conflict between the name of an argument to a wire protocol command and an argument we want to pass into a function. Instead of a command returning a value, it returns a future which will resolve to a value. This opens the door for out-of-order response handling and concurrent response handling in the version 2 protocol. Differential Revision: https://phab.mercurial-scm.org/D3267
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32014
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     1
====================================
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     2
Testing head checking code: Case B-7
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     3
====================================
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     4
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     5
Mercurial checks for the introduction of new heads on push. Evolution comes
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     6
into play to detect if existing branches on the server are being replaced by
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     7
some of the new one we push.
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     8
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     9
This case is part of a series of tests checking this behavior.
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    10
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    11
Category B: simple case involving pruned changesets
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    12
TestCase 7: single changesets, pruned then superseeded (on an existing changeset)
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    13
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    14
.. old-state:
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    15
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    16
.. * 1 changeset branch
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    17
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    18
.. new-state:
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    19
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    20
.. * old branch is rewritten onto the common set,
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    21
.. * the new version is then pruned.
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    22
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    23
.. expected-result:
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    24
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    25
.. * push allowed
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    26
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    27
.. graph-summary:
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    28
..
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    29
..   A ø⇠⊗ A'
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    30
.. B ◔ | |
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    31
..    \|/
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    32
..     ●
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    33
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    34
  $ . $TESTDIR/testlib/push-checkheads-util.sh
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    35
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    36
Test setup
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    37
----------
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    38
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    39
  $ mkdir B7
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    40
  $ cd B7
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    41
  $ setuprepos
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    42
  creating basic server and client repo
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    43
  updating to branch default
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    44
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    45
  $ cd client
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    46
  $ hg up 0
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    47
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    48
  $ mkcommit B0
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    49
  created new head
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    50
  $ mkcommit A1
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    51
  $ hg up 'desc(B0)'
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    52
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    53
  $ hg debugobsolete `getid "desc(A0)"` `getid "desc(A1)"`
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 33252
diff changeset
    54
  obsoleted 1 changesets
32014
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    55
  $ hg debugobsolete --record-parents `getid "desc(A1)"`
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 33252
diff changeset
    56
  obsoleted 1 changesets
32014
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    57
  $ hg log -G --hidden
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    58
  x  ba93660aff8d (draft): A1
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    59
  |
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    60
  @  74ff5441d343 (draft): B0
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    61
  |
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    62
  | x  8aaa48160adc (draft): A0
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    63
  |/
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    64
  o  1e4be0697311 (public): root
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    65
  
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    66
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    67
Actual testing
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    68
--------------
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    69
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    70
  $ hg push
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 33542
diff changeset
    71
  pushing to $TESTTMP/B7/server
32014
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    72
  searching for changes
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    73
  adding changesets
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    74
  adding manifests
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    75
  adding file changes
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    76
  added 1 changesets with 1 changes to 1 files (+1 heads)
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    77
  2 new obsolescence markers
33252
53b3a1968aa6 obsolete: reports the number of local changeset obsoleted when unbundling
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32014
diff changeset
    78
  obsoleted 1 changesets
32014
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    79
818cc18a7574 obsolescence: add test for the "branch replacement" logic during push, case B7
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    80
  $ cd ../..