Mercurial > evolve
view tests/test-evolve-wdir.t @ 6101:431bf23df350
obsolete-parent: evolve the case when parent has multiple successors
Before this patch, we were used to return error that parent has multiple
successors and exit.
This patch take more care of that case and if obsolete parent's successors are:
1) split successors, then we check if they are on a single topological
branch we update to tipmost, otherwise we ask user to select.
2) divergent successors, we suggest user to `hg update` to one of the
successors and run `hg evolve --content-div` to resolve the problem.
Changes in test file shows the updated behavior.
author | Sushil khanchi <sushilkhanchi97@gmail.com> |
---|---|
date | Thu, 29 Jul 2021 00:12:10 +0530 |
parents | 46858e6f8b99 |
children | 01bc197f31d3 |
line wrap: on
line source
=============================================== 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 #testcases inmemory ondisk #if inmemory $ cat >> $HGRCPATH <<EOF > [experimental] > evolution.in-memory = yes > EOF #endif $ 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 content-divergent successors: [3] u_B [4] c_B [2] test that given hint works $ hg up -r 'desc(u_B)' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg evolve --content-div merge:[3] u_B with: [4] c_B base: [1] c_B 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at 767c654afe84 $ hg glog @ 5:767c654afe84 (draft): u_B | o 0:9f0188af4c58 (draft): c_A D. Obsolete wdp with multiple successor (split rewriting) ---------------------------------------------------------- when split csets are on a single topological branch $ hg up -r 'desc(c_A)' 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo X > X; echo Y > Y; echo Z > Z; $ hg ci -Am 'c_XYZ' adding X adding Y adding Z created new head $ hg split -r "desc(c_XYZ)" -d "0 0" --config ui.interactive=True << EOF > f > d > y > f > d > c > EOF 0 files updated, 0 files merged, 3 files removed, 0 files unresolved adding X adding Y adding Z diff --git a/X b/X new file mode 100644 examine changes to 'X'? (enter ? for help) [Ynesfdaq?] f diff --git a/Y b/Y new file mode 100644 examine changes to 'Y'? (enter ? for help) [Ynesfdaq?] d created new head continue splitting? [Ycdq?] y diff --git a/Y b/Y new file mode 100644 examine changes to 'Y'? (enter ? for help) [Ynesfdaq?] f diff --git a/Z b/Z new file mode 100644 examine changes to 'Z'? (enter ? for help) [Ynesfdaq?] d continue splitting? [Ycdq?] c $ hg up -r 'min(desc(c_XYZ))' --hidden 0 files updated, 0 files merged, 0 files removed, 0 files unresolved updated to hidden changeset c8b6cf6ce628 (hidden revision 'c8b6cf6ce628' was split as: 1eb7dbbcecbd, b99a391251cc and 1 more) working directory parent is obsolete! (c8b6cf6ce628) (use 'hg evolve' to update to its tipmost successor: 1eb7dbbcecbd, b99a391251cc and 1 more) $ hg glog -l 3 o 9:b7ec9e61ccbf (draft): c_XYZ | o 8:b99a391251cc (draft): c_XYZ | o 7:1eb7dbbcecbd (draft): c_XYZ | ~ test that given hint works $ hg evolve update:[9] c_XYZ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved working directory is now at b7ec9e61ccbf