changeset 5391:29366c95306d

evolve: add test for content-div case A3
author Sushil khanchi <sushilkhanchi97@gmail.com>
date Tue, 09 Jun 2020 12:05:40 +0530
parents 3216855846dd
children 5c08b3bec031
files tests/test-evolve-content-divergent-case-A3.t
diffstat 1 files changed, 201 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-content-divergent-case-A3.t	Tue Jun 09 12:05:40 2020 +0530
@@ -0,0 +1,201 @@
+===============================================
+Testing content-divergence resolution: Case A.3
+===============================================
+
+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 A: no parents are obsolete
+Testcase 3: one side relocated forward and other amended content changes
+Variants:
+# a: "local" is rebased forward
+# b: "other" is rebased forward
+
+A.3 Relocated forward; other side amended content changes
+=========================================================
+
+.. (Divergence reason):
+..    local: relocated the changeset forward in the graph
+..    other: amended some content changes
+.. Where we show that since one side amended some changes and other just relocated,
+.. the most reasonable behaviour is to relocate the amended one to the same parent as
+.. relocated one and perform 3-way merge.
+..
+.. (local):
+..
+..    C ø⇠○ C'
+..      | |
+..      | ○ B
+..      \ |
+..        ○ A
+..        |
+..        ● O
+..
+.. (other):
+..
+..      C ø⇠○ C''
+..        | |
+..   B ○  | |
+..      \ | /
+..      A ○
+..        |
+..        ● O
+..
+.. (Resolution):
+..
+..     ○ C'''
+..     |
+..     ○ B
+..     |
+..     ○ A
+..     |
+..     ● O
+..
+
+Setup
+-----
+  $ . $TESTDIR/testlib/content-divergence-util.sh
+  $ setuprepos A.3
+  creating test repo for test case A.3
+  - upstream
+  - local
+  - other
+  cd into `local` and proceed with env setup
+
+initial
+
+  $ cd upstream
+  $ mkcommit A
+  $ mkcommit B
+  $ hg prev
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [1] A
+  $ mkcommit C
+  created new head
+  $ cd ../local
+  $ hg pull -qu
+  $ hg rebase -r 'desc(C)' -d 'desc(B)'
+  rebasing 3:928c8849ec01 "C" (tip)
+
+  $ cd ../other
+  $ hg pull -qu
+  $ echo newC > C
+  $ hg amend
+  $ hg push -q
+
+  $ cd ../local
+  $ hg push -fq
+  2 new content-divergent changesets
+  $ hg pull -q
+  2 new content-divergent changesets
+
+Actual test of resolution
+-------------------------
+
+Variant_a: when "local" is rebased forward
+------------------------------------------
+  $ hg evolve -l
+  384129981c4b: C
+    content-divergent: 710d96992b40 (draft) (precursor 928c8849ec01)
+  
+  710d96992b40: C
+    content-divergent: 384129981c4b (draft) (precursor 928c8849ec01)
+  
+  $ hg log -G --hidden
+  *  5:710d96992b40 (draft): C [content-divergent]
+  |
+  | @  4:384129981c4b (draft): C [content-divergent]
+  | |
+  +---x  3:928c8849ec01 (draft): C
+  | |
+  | o  2:f6fbb35d8ac9 (draft): B
+  |/
+  o  1:f5bc6836db60 (draft): A
+  |
+  o  0:a9bdc8b26820 (public): O
+  
+
+  $ hg evolve --content-divergent
+  merge:[4] C
+  with: [5] C
+  base: [3] C
+  rebasing "other" content-divergent changeset 710d96992b40 on f6fbb35d8ac9
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 3ad062d48137
+
+  $ hg log -G
+  @  7:3ad062d48137 (draft): C
+  |
+  o  2:f6fbb35d8ac9 (draft): B
+  |
+  o  1:f5bc6836db60 (draft): A
+  |
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg log -pl 1
+  7:3ad062d48137 (draft): C 
+  diff -r f6fbb35d8ac9 -r 3ad062d48137 C
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/C	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,1 @@
+  +newC
+  
+  $ hg evolve -l
+
+Variant_b: when "other" is rebased forward
+------------------------------------------
+
+  $ cd ../other
+  $ hg pull -q
+  2 new content-divergent changesets
+  $ hg evolve -l
+  710d96992b40: C
+    content-divergent: 384129981c4b (draft) (precursor 928c8849ec01)
+  
+  384129981c4b: C
+    content-divergent: 710d96992b40 (draft) (precursor 928c8849ec01)
+  
+  $ hg log -G --hidden
+  *  5:384129981c4b (draft): C [content-divergent]
+  |
+  | @  4:710d96992b40 (draft): C [content-divergent]
+  | |
+  | | x  3:928c8849ec01 (draft): C
+  | |/
+  o |  2:f6fbb35d8ac9 (draft): B
+  |/
+  o  1:f5bc6836db60 (draft): A
+  |
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve --content-divergent
+  merge:[5] C
+  with: [4] C
+  base: [3] C
+  rebasing "other" content-divergent changeset 710d96992b40 on f6fbb35d8ac9
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 3ad062d48137
+
+  $ hg log -G
+  @  7:3ad062d48137 (draft): C
+  |
+  o  2:f6fbb35d8ac9 (draft): B
+  |
+  o  1:f5bc6836db60 (draft): A
+  |
+  o  0:a9bdc8b26820 (public): O
+  
+  $ hg evolve -l
+
+  $ hg log -pl1
+  7:3ad062d48137 (draft): C 
+  diff -r f6fbb35d8ac9 -r 3ad062d48137 C
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/C	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,1 @@
+  +newC
+