tests/test-push-checkheads-unpushed-D2.t
author Matt Harbison <matt_harbison@yahoo.com>
Sun, 22 Aug 2021 17:59:21 -0400
branchstable
changeset 47866 4162f6b40f2c
parent 46119 9261f6c1d39b
permissions -rw-r--r--
windows: degrade to py2 behavior when reading a non-symlink as a symlink While waiting for the push to hg-committed in WSL to complete, I ran a `phabimport` from Windows and got this traceback: $ hg phabimport 11313 ** Unknown exception encountered with possibly-broken third-party extension "mercurial_keyring" (version N/A) ** which supports versions unknown of Mercurial. ** Please disable "mercurial_keyring" and try your action again. ** If that fixes the bug please report it to https://foss.heptapod.net/mercurial/mercurial_keyring/issues ** Python 3.9.5 (default, May 6 2021, 17:29:31) [MSC v.1928 64 bit (AMD64)] ** Mercurial Distributed SCM (version 5.9rc1+hg32.0e2f5733563d) ** Extensions loaded: absorb, blackbox, evolve 10.3.3, extdiff, fastannotate, fix, mercurial_keyring, mq, phabblocker 20210126, phabricator, rebase, show, strip, topic 0.22.3 Traceback (most recent call last): File "mercurial.lock", line 279, in _trylock File "mercurial.vfs", line 202, in makelock File "mercurial.util", line 2147, in makelock FileExistsError: [WinError 183] Cannot create a file when that file already exists: b'hp-omen:78348' -> b'C:\\Users\\Matt\\hg/.hg/store/lock' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 24, in <module> File "mercurial.dispatch", line 144, in run File "mercurial.dispatch", line 250, in dispatch File "mercurial.dispatch", line 294, in _rundispatch File "mercurial.dispatch", line 470, in _runcatch File "mercurial.dispatch", line 480, in _callcatch File "mercurial.scmutil", line 153, in callcatch File "mercurial.dispatch", line 460, in _runcatchfunc File "mercurial.dispatch", line 1273, in _dispatch File "mercurial.dispatch", line 918, in runcommand File "mercurial.dispatch", line 1285, in _runcommand File "mercurial.dispatch", line 1271, in <lambda> File "mercurial.util", line 1886, in check File "mercurial.util", line 1886, in check File "hgext.mq", line 4239, in mqcommand File "mercurial.util", line 1886, in check File "mercurial.util", line 1886, in check File "hgext.phabricator", line 314, in inner File "hgext.phabricator", line 2222, in phabimport File "hgext.phabricator", line 2123, in readpatch File "hgext.phabricator", line 2199, in _write File "mercurial.localrepo", line 2956, in lock File "mercurial.localrepo", line 2918, in _lock File "mercurial.lock", line 152, in trylock File "mercurial.lock", line 283, in _trylock File "mercurial.lock", line 314, in _readlock File "mercurial.vfs", line 221, in readlock File "mercurial.util", line 2163, in readlock File "mercurial.windows", line 619, in readlink ValueError: not a symbolic link Both exceptions look accurate (the file exists, and the Windows side can't read WSL side symlinks). I didn't try to reproduce this entirely within the Windows side, but we can do better than a cryptic stacktrace. With this change, the same scenario results in this abort: abort: C:\Users\Matt\hg/.hg/store/lock: The file cannot be accessed by the system When both the `push` and `phabimport` are done on the Windows side, it prints a message about waiting for the lock, and successfully applies the patch after the push completes. I'm not sure if there's enough info to be able to convert the abort into the wait scenario. As it stands now, we don't support symlinks on Windows, which requires either a UAC Administrator level process or an opt-in in developer mode, and there are several places where the new symlink on Windows support in py3 was explicitly disabled in order to get tests to pass quicker. Differential Revision: https://phab.mercurial-scm.org/D11333
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     1
====================================
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     2
Testing head checking code: Case D-2
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     3
====================================
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     4
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
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
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
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
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     7
some of the new one we push.
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     8
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
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.
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    10
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    11
Category D: remote head is "obs-affected" locally, but result is not part of the push
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    12
TestCase 1: remote branch has 2 changes, head is pruned, other is rewritten but result is not pushed
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    13
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    14
.. old-state:
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    15
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    16
.. * 1 changeset branch
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    17
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    18
.. new-state:
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    19
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    20
.. * old head is pruned
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    21
.. * 1 new branch succeeding to the other changeset in the old branch
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    22
.. * 1 new unrelated branch
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    23
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    24
.. expected-result:
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    25
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    26
.. * push allowed
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    27
.. * pushing only the unrelated branch: denied
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    28
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    29
.. graph-summary:
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    30
..
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    31
..   B ⊗
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    32
..     |
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    33
..   A ø⇠○ A'
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    34
..     |/
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    35
..     | ◔ C
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    36
..     |/
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    37
..     ●
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    38
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    39
  $ . $TESTDIR/testlib/push-checkheads-util.sh
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    40
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    41
Test setup
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    42
----------
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    43
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    44
  $ mkdir D2
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    45
  $ cd D2
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    46
  $ setuprepos
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    47
  creating basic server and client repo
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    48
  updating to branch default
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    49
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    50
  $ cd server
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    51
  $ mkcommit B0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    52
  $ cd ../client
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    53
  $ hg pull
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
    54
  pulling from $TESTTMP/D2/server
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    55
  searching for changes
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    56
  adding changesets
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    57
  adding manifests
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    58
  adding file changes
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    59
  added 1 changesets with 1 changes to 1 files
39480
89630d0b3e23 phase: report number of non-public changeset alongside the new range
Boris Feld <boris.feld@octobus.net>
parents: 35709
diff changeset
    60
  new changesets d73caddc5533 (1 drafts)
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    61
  (run 'hg update' to get a working copy)
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    62
  $ hg up 0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    63
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    64
  $ mkcommit A1
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    65
  created new head
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    66
  $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"`
42893
34a46d48d24e debugobsolete: also issue the "new obsmarkers" messsage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39480
diff changeset
    67
  1 new obsolescence markers
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 31987
diff changeset
    68
  obsoleted 1 changesets
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35393
diff changeset
    69
  1 new orphan changesets
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    70
  $ hg debugobsolete --record-parents `getid "desc(B0)"`
42893
34a46d48d24e debugobsolete: also issue the "new obsmarkers" messsage
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 39480
diff changeset
    71
  1 new obsolescence markers
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 31987
diff changeset
    72
  obsoleted 1 changesets
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    73
  $ hg up 0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    74
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    75
  $ mkcommit C0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    76
  created new head
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    77
  $ hg log -G --hidden
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    78
  @  0f88766e02d6 (draft): C0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    79
  |
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    80
  | o  f6082bc4ffef (draft): A1
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    81
  |/
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    82
  | x  d73caddc5533 (draft): B0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    83
  | |
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    84
  | x  8aaa48160adc (draft): A0
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    85
  |/
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    86
  o  1e4be0697311 (public): root
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    87
  
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    88
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    89
Actual testing
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    90
--------------
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    91
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    92
  $ hg push --rev 'desc(C0)'
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
    93
  pushing to $TESTTMP/D2/server
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    94
  searching for changes
45908
122f0b59f5f0 errors: remove trailing "!" in messages about creating new heads on push
Martin von Zweigbergk <martinvonz@google.com>
parents: 42893
diff changeset
    95
  abort: push creates new remote head 0f88766e02d6
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    96
  (merge or see 'hg help push' for details about pushing new heads)
46119
9261f6c1d39b errors: raise StateError when push fails because it creates new heads
Martin von Zweigbergk <martinvonz@google.com>
parents: 45908
diff changeset
    97
  [20]
31987
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    98
8823daaf4665 obsolescence: add test for the "branch replacement" logic during push, case D2
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    99
  $ cd ../..