tests/test-push-checkheads-unpushed-D3.t
author Gregory Szorc <gregory.szorc@gmail.com>
Sun, 11 Mar 2018 10:51:14 -0700
changeset 36895 a5c478843c82
parent 35709 1a09dad8b85a
child 39480 89630d0b3e23
permissions -rw-r--r--
hgweb: construct static URL like hgweb does hgwebdir has a bit of code for constructing URLs. This reinvents wheels from our parsedrequest instance. And sometimes the behavior varies from what hgweb does. We'll want to converge that behavior. This commit changes hgwebdir so its staticurl template keyword is constructed the same way as hgweb's. There's probably room to factor this into a shared function. But let's solve the problem of divergence first. Differential Revision: https://phab.mercurial-scm.org/D2817
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     1
====================================
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     2
Testing head checking code: Case D-3
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     3
====================================
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     4
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
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
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
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
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     7
some of the new one we push.
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
     8
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
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.
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    10
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
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
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    12
TestCase 3: multi-changeset branch, split on multiple new others, only one of them is pushed
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    13
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    14
.. old-state:
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    15
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    16
.. * 2 changesets branch
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    17
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    18
.. new-state:
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    19
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    20
.. * 2 new branches, each superseding one changeset in the old one.
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    21
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    22
.. expected-result:
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    23
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    24
.. * pushing only one of the resulting branch (either of them)
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    25
.. * push denied
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    26
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    27
.. graph-summary:
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    28
..
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    29
.. B'◔⇢ø B
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    30
..   | |
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    31
.. A | ø⇠◔ A'
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    32
..   | |/
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    33
..    \|
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    34
..     ●
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    35
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    36
  $ . $TESTDIR/testlib/push-checkheads-util.sh
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    37
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    38
Test setup
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    39
----------
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    40
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    41
  $ mkdir D3
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    42
  $ cd D3
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    43
  $ setuprepos
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    44
  creating basic server and client repo
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    45
  updating to branch default
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    46
  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    47
  $ cd server
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    48
  $ mkcommit B0
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    49
  $ hg up 0
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    50
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    51
  $ cd ../client
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    52
  $ hg pull
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
    53
  pulling from $TESTTMP/D3/server
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    54
  searching for changes
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    55
  adding changesets
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    56
  adding manifests
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    57
  adding file changes
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    58
  added 1 changesets with 1 changes to 1 files
34661
eb586ed5d8ce transaction-summary: show the range of new revisions upon pull/unbundle (BC)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 33542
diff changeset
    59
  new changesets d73caddc5533
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    60
  (run 'hg update' to get a working copy)
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    61
  $ hg up 0
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    62
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    63
  $ mkcommit A1
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    64
  created new head
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    65
  $ hg up '0'
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    66
  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    67
  $ mkcommit B1
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    68
  created new head
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    69
  $ 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: 32016
diff changeset
    70
  obsoleted 1 changesets
35709
1a09dad8b85a evolution: report new unstable changesets
Martin von Zweigbergk <martinvonz@google.com>
parents: 35393
diff changeset
    71
  1 new orphan changesets
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    72
  $ hg debugobsolete `getid "desc(B0)" ` `getid "desc(B1)"`
33542
b11e8c67fb0f debugobsolete: also report the number of obsoleted changesets
Boris Feld <boris.feld@octobus.net>
parents: 32016
diff changeset
    73
  obsoleted 1 changesets
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    74
  $ hg log -G --hidden
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    75
  @  25c56d33e4c4 (draft): B1
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    76
  |
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    77
  | o  f6082bc4ffef (draft): A1
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    78
  |/
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    79
  | x  d73caddc5533 (draft): B0
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    80
  | |
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    81
  | x  8aaa48160adc (draft): A0
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    82
  |/
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    83
  o  1e4be0697311 (public): root
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    84
  
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    85
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    86
Actual testing
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    87
--------------
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    88
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    89
  $ hg push --rev 'desc(A1)'
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
    90
  pushing to $TESTTMP/D3/server
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    91
  searching for changes
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    92
  abort: push creates new remote head f6082bc4ffef!
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    93
  (merge or see 'hg help push' for details about pushing new heads)
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    94
  [255]
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    95
  $ hg push --rev 'desc(B1)'
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
    96
  pushing to $TESTTMP/D3/server
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    97
  searching for changes
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    98
  abort: push creates new remote head 25c56d33e4c4!
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
    99
  (merge or see 'hg help push' for details about pushing new heads)
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   100
  [255]
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   101
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   102
Extra testing
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   103
-------------
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   104
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   105
In this case, even a bare push is creating more heads
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   106
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   107
  $ hg push
35393
4441705b7111 tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents: 34661
diff changeset
   108
  pushing to $TESTTMP/D3/server
32016
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   109
  searching for changes
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   110
  abort: push creates new remote head 25c56d33e4c4!
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   111
  (merge or see 'hg help push' for details about pushing new heads)
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   112
  [255]
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   113
43c91eb53806 obsolescence: add test for the "branch replacement" logic during push, case D3
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff changeset
   114
  $ cd ../..