Mercurial > evolve
diff tests/test-evolve-content-divergent-corner-cases.t @ 4481:d02a7c8cdee5 stable
test: consolidate the content-divergent test cases
This commit move most of the content divergent related test in dedicated and
thematic test files.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 10 Apr 2019 14:32:00 +0200 |
parents | tests/test-divergent.t@f9dad99a90d5 |
children | 32446b7a6e7c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-content-divergent-corner-cases.t Wed Apr 10 14:32:00 2019 +0200 @@ -0,0 +1,321 @@ +======================================================== +Tests the resolution of content divergence: corner cases +======================================================== + +This file intend to cover cases that are specific enough to not fit in the +other cases. + + $ cat >> $HGRCPATH <<EOF + > [alias] + > glog = log -GT "{rev}:{node|short} {desc|firstline}\n ({bookmarks}) [{branch}] {phase}" + > [defaults] + > amend=-d "0 0" + > fold=-d "0 0" + > [web] + > push_ssl = false + > allow_push = * + > [phases] + > publish = False + > [diff] + > git = 1 + > unified = 0 + > [ui] + > logtemplate = {rev}:{node|short}@{branch}({phase}) {desc|firstline} [{troubles}]\n + > [extensions] + > EOF + $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH + $ mkcommit() { + > echo "$1" > "$1" + > hg add "$1" + > hg ci -m "add $1" + > } + + $ mkcommits() { + > for i in $@; do mkcommit $i ; done + > } + +Basic test of divergence: two divergent changesets with the same parents +With --all --any we dedupe the divergent and solve the divergence once + + $ hg init test1 + $ cd test1 + $ echo a > a + $ hg ci -Aqm "added a" + $ echo b > b + $ hg ci -Aqm "added b" + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo bdivergent > bdivergent1 + $ hg ci -Am "divergent" + adding bdivergent1 + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo bdivergent > bdivergent2 + $ hg ci -Am "divergent" + adding bdivergent2 + created new head + + $ hg prune -s 8374d2ddc3a4 "desc('added b')" + 1 changesets pruned + $ hg prune -s 593c57f2117e "desc('added b')" --hidden + 1 changesets pruned + 2 new content-divergent changesets + + $ hg log -G + @ 3:8374d2ddc3a4@default(draft) divergent [content-divergent] + | + | * 2:593c57f2117e@default(draft) divergent [content-divergent] + |/ + o 0:9092f1db7931@default(draft) added a [] + + + $ hg evolve --all --any --content-divergent + merge:[2] divergent + with: [3] divergent + base: [1] added b + updating to "local" side of the conflict: 593c57f2117e + merging "other" content-divergent changeset '8374d2ddc3a4' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 45bf1312f454 + $ hg log -G + @ 4:45bf1312f454@default(draft) divergent [] + | + o 0:9092f1db7931@default(draft) added a [] + +Test divergence resolution when it yields to an empty commit (issue4950) +cdivergent2 contains the same content than cdivergent1 and they are divergent +versions of the revision _c + + $ hg up .^ + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ mkcommit _c + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ mkcommit cdivergent1 + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo "cdivergent1" > cdivergent1 + $ hg add cdivergent1 + $ hg ci -m "add _c" + created new head + + $ hg log -G + @ 7:b2ae71172042@default(draft) add _c [] + | + | o 6:e3ff64ce8d4c@default(draft) add cdivergent1 [] + |/ + | o 5:48819a835615@default(draft) add _c [] + |/ + | o 4:45bf1312f454@default(draft) divergent [] + |/ + o 0:9092f1db7931@default(draft) added a [] + + + $ hg prune -s b2ae71172042 48819a835615 + 1 changesets pruned + $ hg prune -s e3ff64ce8d4c 48819a835615 --hidden + 1 changesets pruned + 2 new content-divergent changesets + + $ hg log -G + @ 7:b2ae71172042@default(draft) add _c [content-divergent] + | + | * 6:e3ff64ce8d4c@default(draft) add cdivergent1 [content-divergent] + |/ + | o 4:45bf1312f454@default(draft) divergent [] + |/ + o 0:9092f1db7931@default(draft) added a [] + + $ hg evolve --all --any --content-divergent + merge:[6] add cdivergent1 + with: [7] add _c + base: [5] add _c + updating to "local" side of the conflict: e3ff64ce8d4c + merging "other" content-divergent changeset 'b2ae71172042' + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + nothing changed + working directory is now at e3ff64ce8d4c + + $ cd .. + +Test None docstring issue of evolve divergent, which caused hg crush + + $ hg init test2 + $ cd test2 + $ mkcommits _a _b + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo bdivergent > bdivergent11 + $ hg ci -Am "bdivergent" + adding bdivergent11 + created new head + + $ hg up .^ + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo bdivergent > bdivergent22 + $ hg ci -Am "bdivergent" + adding bdivergent22 + created new head + + $ hg log -G + @ 3:6b096fb45070@default(draft) bdivergent [] + | + | o 2:05a6b6a9e633@default(draft) bdivergent [] + |/ + | o 1:37445b16603b@default(draft) add _b [] + |/ + o 0:135f39f4bd78@default(draft) add _a [] + + + $ hg prune -s 6b096fb45070 37445b16603b + 1 changesets pruned + $ hg prune -s 05a6b6a9e633 37445b16603b --hidden + 1 changesets pruned + 2 new content-divergent changesets + $ hg log -G + @ 3:6b096fb45070@default(draft) bdivergent [content-divergent] + | + | * 2:05a6b6a9e633@default(draft) bdivergent [content-divergent] + |/ + o 0:135f39f4bd78@default(draft) add _a [] + + + $ cat >$TESTTMP/test_extension.py << EOF + > from mercurial import merge + > origupdate = merge.update + > def newupdate(*args, **kwargs): + > return origupdate(*args, **kwargs) + > merge.update = newupdate + > EOF + $ cat >> $HGRCPATH << EOF + > [extensions] + > testextension=$TESTTMP/test_extension.py + > EOF + $ hg evolve --all + nothing to evolve on current working copy parent + (do you want to use --content-divergent) + [2] + $ hg evolve --content-divergent + merge:[3] bdivergent + with: [2] bdivergent + base: [1] add _b + merging "other" content-divergent changeset '05a6b6a9e633' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 73ff357d3975 + + $ cd .. + +Test to make sure that evolve don't fall into unrecoverable state (issue6053) +------------------------------------------------------------------------------ + +It happened when two divergent csets has different parent (need relocation) +and resolution parent is obsolete. So this issue triggered when during +relocation we hit conflicts. So lets make the repo as described. + + $ hg init localside + $ cd localside + $ for ch in a b c d e; do + > echo $ch > $ch; + > hg add $ch; + > hg ci -m "added "$ch; + > done; + + $ hg glog + @ 4:8d71eadcc9df added e + | () [default] draft + o 3:9150fe93bec6 added d + | () [default] draft + o 2:155349b645be added c + | () [default] draft + o 1:5f6d8a4bf34a added b + | () [default] draft + o 0:9092f1db7931 added a + () [default] draft + + $ echo ee > e + $ hg amend -m "updated e" + $ hg up 1 -q + +To make sure we hit conflict while relocating + $ echo dd > d + $ echo ee > e + $ hg add d e + $ hg ci -m "updated e" + created new head + +Lets create divergence + $ hg prune 4 -s . --hidden + 1 changesets pruned + 2 new content-divergent changesets + +Making obsolete resolution parent + $ hg prune 3 + 1 changesets pruned + 1 new orphan changesets + + $ hg glog + @ 6:de4ea3103326 updated e + | () [default] draft + | * 5:ff6f7cd76a7c updated e + | | () [default] draft + | x 3:9150fe93bec6 added d + | | () [default] draft + | o 2:155349b645be added c + |/ () [default] draft + o 1:5f6d8a4bf34a added b + | () [default] draft + o 0:9092f1db7931 added a + () [default] draft + + $ hg evolve --content-divergent --any + merge:[5] updated e + with: [6] updated e + base: [4] added e + rebasing "other" content-divergent changeset de4ea3103326 on 9150fe93bec6 + merging d + warning: conflicts while merging d! (edit, then use 'hg resolve --mark') + fix conflicts and see `hg help evolve.interrupted` + [1] + + $ hg diff --no-git --config diff.unified=3 + diff -r 9150fe93bec6 d + --- a/d Thu Jan 01 00:00:00 1970 +0000 + +++ b/d Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,5 @@ + +<<<<<<< destination: 9150fe93bec6 - test: added d + d + +======= + +dd + +>>>>>>> evolving: de4ea3103326 - test: updated e + diff -r 9150fe93bec6 e + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/e Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +ee + + $ echo dresolved > d + $ hg res -m + (no more unresolved files) + continue: hg evolve --continue + + $ hg evolve --continue + evolving 6:de4ea3103326 "updated e" + updating to "local" side of the conflict: ff6f7cd76a7c + merging "other" content-divergent changeset 'e504bd82de7e' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + working directory is now at 83b1664a580f + + $ hg glog -l1 + @ 8:83b1664a580f updated e + | () [default] draft + ~ + + $ cd ..