diff tests/test-evolve-content-divergent-case-B1.t @ 5830:67fc03f42d92 mercurial-5.0

test-compat: merge mercurial-5.1 into mercurial-5.0 # no-check-commit
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 11 Mar 2021 14:22:45 +0800
parents 43a5371fa669
children 53d63b608230
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-content-divergent-case-B1.t	Thu Mar 11 14:22:45 2021 +0800
@@ -0,0 +1,198 @@
+===============================================
+Testing content-divergence resolution: Case B.1
+===============================================
+
+Independent rewrites of same changeset can lead to content-divergence. In most
+common cases, it can occur when multiple users rewrite the same changeset
+independently and push it.
+
+This test belongs to a series of tests checking the resolution of content-divergent
+changesets.
+
+Category B: parents are obsolete
+Testcase 1: one side amended changes and other rebased to in-between successor of basep1
+Variants:
+# a: default resolution
+# b: minimal resolution using `experimental.evolution.divergence-resolution-minimal=True`
+
+B.1 Relocated backward; Rebased to parent's successor
+=====================================================
+
+.. (Divergence reason):
+..    local: rebased to the 'in-between' successor of basep1
+..    other: amended some changes
+.. The default resolution here is that we choose the final successor as resolution parent,
+.. but this behavior can be changed to use the 'in-between' successor as resolution parent
+.. by using a config option `experimental.evolution.divergence-resolution-minimal=True`
+..
+.. This test case is considered complicated and can change its behavior acc. to the user
+.. feedback. For more, please look at section 'D-A3.1' in troubles-handling.rst
+..
+.. (local):
+..
+..      B ø → ○ B'
+..        |   |
+..      A ø → ø A' → ○ A''
+..        |   |      |
+..        |----      |
+..        |-----------
+..        |
+..      O ●
+..
+.. (other):
+..
+..      B ø→○ B'
+..        | /
+..      A ○
+..        |
+..      O ●
+..
+.. (Resolution):
+..
+..     ○ B'''
+..     |
+..     ○ A''
+..     |
+..     ● O
+..
+
+Setup
+-----
+  $ . $TESTDIR/testlib/content-divergence-util.sh
+  $ setuprepos B.1
+  creating test repo for test case B.1
+  - upstream
+  - local
+  - other
+  cd into `local` and proceed with env setup
+
+initial
+
+  $ cd upstream
+  $ mkcommit A
+  $ mkcommit B
+  $ cd ../local
+  $ hg pull -qu
+  $ hg prev
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [1] A
+  $ echo fooA >> A
+  $ hg amend -m 'new_A'
+  1 new orphan changesets
+  $ hg evolve
+  move:[2] B
+  atop:[3] new_A
+  $ echo barA >> A
+  $ hg amend -m 'latest_A'
+  1 new orphan changesets
+
+  $ cd ../other
+  $ hg pull -qu
+  $ echo fooB > B
+  $ hg amend -m 'new_B'
+  $ hg push -q
+
+  $ cd ../local
+  $ hg push -fq
+  2 new orphan changesets
+  2 new content-divergent changesets
+  $ hg pull -q
+  1 new orphan changesets
+  2 new content-divergent changesets
+
+
+Actual test of resolution
+-------------------------
+
+Variant_a: default resolution
+-----------------------------
+  $ hg evolve -l
+  429afd16ac76: B
+    orphan: 1ffcccee011c (obsolete parent)
+    content-divergent: 807cc2b37fb3 (draft) (precursor f6fbb35d8ac9)
+  
+  807cc2b37fb3: new_B
+    orphan: f5bc6836db60 (obsolete parent)
+    content-divergent: 429afd16ac76 (draft) (precursor f6fbb35d8ac9)
+  
+  $ hg log -G
+  *  6:807cc2b37fb3 (draft): new_B [orphan content-divergent]
+  |
+  | @  5:45ed635c7cfc (draft): latest_A
+  | |
+  | | *  4:429afd16ac76 (draft): B [orphan content-divergent]
+  | | |
+  | | x  3:1ffcccee011c (draft): new_A
+  | |/
+  x |  1:f5bc6836db60 (draft): A
+  |/
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve --content-divergent
+  merge:[4] B
+  with: [6] new_B
+  base: [2] B
+  rebasing "divergent" content-divergent changeset 429afd16ac76 on 45ed635c7cfc
+  rebasing "other" content-divergent changeset 807cc2b37fb3 on 45ed635c7cfc
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ hg log -G
+  o  9:6f740085e668 (draft): new_B
+  |
+  @  5:45ed635c7cfc (draft): latest_A
+  |
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve -l
+
+
+Variant_b: minimal resolution
+-----------------------------
+
+  $ cd ../other
+  $ hg pull -q
+  2 new orphan changesets
+  2 new content-divergent changesets
+  $ hg evolve -l
+  807cc2b37fb3: new_B
+    orphan: f5bc6836db60 (obsolete parent)
+    content-divergent: 429afd16ac76 (draft) (precursor f6fbb35d8ac9)
+  
+  429afd16ac76: B
+    orphan: 1ffcccee011c (obsolete parent)
+    content-divergent: 807cc2b37fb3 (draft) (precursor f6fbb35d8ac9)
+  
+  $ hg log -G
+  o  6:45ed635c7cfc (draft): latest_A
+  |
+  | *  5:429afd16ac76 (draft): B [orphan content-divergent]
+  | |
+  | x  4:1ffcccee011c (draft): new_A
+  |/
+  | @  3:807cc2b37fb3 (draft): new_B [orphan content-divergent]
+  | |
+  | x  1:f5bc6836db60 (draft): A
+  |/
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve --content-divergent --config experimental.evolution.divergence-resolution-minimal=True
+  merge:[3] new_B
+  with: [5] B
+  base: [2] B
+  rebasing "divergent" content-divergent changeset 807cc2b37fb3 on 1ffcccee011c
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 2431e876af63
+
+  $ hg log -G
+  @  8:2431e876af63 (draft): new_B [orphan]
+  |
+  | o  6:45ed635c7cfc (draft): latest_A
+  | |
+  x |  4:1ffcccee011c (draft): new_A
+  |/
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve -l
+  2431e876af63: new_B
+    orphan: 1ffcccee011c (obsolete parent)
+