diff tests/test-evolve-wdir.t @ 5442:25b746aea135

branching: merge with stable
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 24 Jul 2020 10:50:53 +0200
parents 272094174185
children 053f1fc12545 c5dfbbe4363d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-wdir.t	Fri Jul 24 10:50:53 2020 +0200
@@ -0,0 +1,114 @@
+===============================================
+Testing evolution of obsolete working directory
+===============================================
+
+Pulling changes from other repos can make your working directory parent (wdir)
+obsolete, most probably because now it has a new successor. But there are
+other cases as well where it might be pruned with no successors or split
+in multiple changesets etc.
+
+This test file deals with all the possible cases for the evolution from an
+obsolete working directory parent.
+
+.. Case A: obsolete wdp with single successor
+..     Resolution : simply update to the successor
+..
+.. Case B: obsolete wdp with no successor (simply pruned)
+..     Resolution : update to a not-dead ancestor
+..
+.. Case C: obsolete wdp with multiple successor (divergence rewriting)
+..     Resolution : #TODO: not handled yet
+..
+.. Case D: obsolete wdp with multiple successor (split rewriting)
+..     Resolution : #TODO: not handled yet
+
+A. Obsolete wdp with single successor
+-------------------------------------
+
+Setup
+  $ . $TESTDIR/testlib/common.sh
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > evolve=
+  > rebase=
+  > [alias]
+  > glog = log --graph --template "{rev}:{node|short} ({phase}): {desc|firstline} {if(troubles, '[{troubles}]')}\n"
+  > EOF
+
+  $ hg init repo
+  $ cd repo
+  $ mkcommit c_A
+  $ mkcommit c_B
+  $ hg amend -m "u_B"
+  $ hg up -r 'desc(c_B)' --hidden
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 707ee88b2870
+  (hidden revision '707ee88b2870' was rewritten as: 9bf151312dec)
+  working directory parent is obsolete! (707ee88b2870)
+  (use 'hg evolve' to update to its successor: 9bf151312dec)
+
+  $ hg evolve
+  update:[2] u_B
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 9bf151312dec
+  $ hg glog
+  @  2:9bf151312dec (draft): u_B
+  |
+  o  0:9f0188af4c58 (draft): c_A
+  
+
+B. Obsolete wdp with no successor
+---------------------------------
+
+  $ hg prune .
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory is now at 9f0188af4c58
+  1 changesets pruned
+  $ hg up -r 'desc(c_B)' --hidden
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 707ee88b2870
+  (hidden revision '707ee88b2870' is pruned)
+  working directory parent is obsolete! (707ee88b2870)
+  (use 'hg evolve' to update to its parent successor)
+
+  $ hg evolve
+  update:[0] c_A
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory is now at 9f0188af4c58
+  $ hg glog
+  @  0:9f0188af4c58 (draft): c_A
+  
+
+C. Obsolete wdp with multiple successor (divergence rewriting)
+---------------------------------------------------------------
+
+  $ hg metaedit -r 'desc(u_B)' -d '0 1' --hidden
+  $ hg metaedit -r 'desc(c_B)' -d '0 1' --hidden
+  2 new content-divergent changesets
+  $ hg up -r 'min(desc(c_B))' --hidden
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  updated to hidden changeset 707ee88b2870
+  (hidden revision '707ee88b2870' has diverged)
+  working directory parent is obsolete! (707ee88b2870)
+  (707ee88b2870 has diverged, use 'hg evolve --list --content-divergent' to resolve the issue)
+
+  $ hg evolve
+  parent is obsolete with multiple successors:
+  [3] u_B
+  [4] c_B
+  [2]
+
+  $ hg glog
+  *  4:39e54eb7aa3c (draft): c_B [content-divergent]
+  |
+  | *  3:90624b574289 (draft): u_B [content-divergent]
+  |/
+  | @  1:707ee88b2870 (draft): c_B
+  |/
+  o  0:9f0188af4c58 (draft): c_A
+  
+
+D. Obsolete wdp with multiple successor (split rewriting)
+----------------------------------------------------------
+
+#TODO: yet to write tests for this case