Mercurial > evolve
view tests/test-unstable.t @ 3315:c153441cdc0e
stablesort: record, cache and reuse jump
Iterating below a merge means two things:
1) iterate over the part exclusive to the higher parents,
2) iterate from the lower parents.
While iterating on the exclusive part, there will be case were we just go the
next natural parent, and case were we'll have to "jump" to another revision. If
we record all point this "jump" happens and their target, we can easily
reproduce the iteration in the future. With that information we can iterate over
the exclusive part of the merge without having to compute it entirely.
In addition we store the reason of the jump. This will help the stable range
processing later.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 18 Dec 2017 09:04:16 +0100 |
parents | 28fb347a5bf8 |
children | c0ee9ddfd5ff ae6fddf39933 |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [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}\n > [extensions] > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext3rd/evolve/" >> $HGRCPATH $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } $ mkstack() { > # Creates a stack of commit based on $1 with messages from $2, $3 .. > hg update "$1" -C > shift > mkcommits $* > } $ mkcommits() { > for i in $@; do mkcommit $i ; done > } ============================================================================== Test instability resolution for a changeset unstable because its parent is obsolete with one successor ============================================================================== $ hg init test1 $ cd test1 $ mkcommits _a _b _c $ hg up "desc(_b)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg amend -m "bprime" 1 new orphan changesets $ hg log -G @ 3:36050226a9b9@default(draft) bprime | | o 2:102002290587@default(draft) add _c | | | x 1:37445b16603b@default(draft) add _b |/ o 0:135f39f4bd78@default(draft) add _a $ hg evo --all --any --orphan move:[2] add _c atop:[3] bprime working directory is now at fdcf3523a74d $ hg log -G @ 4:fdcf3523a74d@default(draft) add _c | o 3:36050226a9b9@default(draft) bprime | o 0:135f39f4bd78@default(draft) add _a $ cd .. =============================================================================== Test instability resolution for a merge changeset unstable because one of its parent is obsolete Not supported yet ============================================================================== $ hg init test2 $ cd test2 $ mkcommit base $ mkcommits _a $ hg up "desc(base)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit _c created new head $ hg merge "desc(_a)" >/dev/null $ hg commit -m "merge" $ hg up "desc(_a)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg amend -m "aprime" 1 new orphan changesets $ hg log -G @ 4:47127ea62e5f@default(draft) aprime | | o 3:6b4280e33286@default(draft) merge | |\ +---o 2:474da87dd33b@default(draft) add _c | | | x 1:b3264cec9506@default(draft) add _a |/ o 0:b4952fcf48cf@default(draft) add base $ hg evo --all --any --orphan move:[3] merge atop:[4] aprime working directory is now at 0bf3f3a59c8c $ hg log -G @ 5:0bf3f3a59c8c@default(draft) merge |\ | o 4:47127ea62e5f@default(draft) aprime | | o | 2:474da87dd33b@default(draft) add _c |/ o 0:b4952fcf48cf@default(draft) add base $ cd .. =============================================================================== Test instability resolution for a merge changeset unstable because both of its parent are obsolete Not supported yet ============================================================================== $ hg init test3 $ cd test3 $ mkcommit base $ mkcommits _a $ hg up "desc(base)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit _c created new head $ hg merge "desc(_a)" >/dev/null $ hg commit -m "merge" $ hg up "desc(_a)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg amend -m "aprime" 1 new orphan changesets $ hg up "desc(_c)" 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg amend -m "cprime" $ hg log -G @ 5:2db39fda7e2f@default(draft) cprime | | o 4:47127ea62e5f@default(draft) aprime |/ | o 3:6b4280e33286@default(draft) merge | |\ +---x 2:474da87dd33b@default(draft) add _c | | | x 1:b3264cec9506@default(draft) add _a |/ o 0:b4952fcf48cf@default(draft) add base $ hg evo --all --any --orphan warning: no support for evolving merge changesets with two obsolete parents yet (Redo the merge (6b4280e33286) and use `hg prune <old> --succ <new>` to obsolete the old one) $ hg log -G @ 5:2db39fda7e2f@default(draft) cprime | | o 4:47127ea62e5f@default(draft) aprime |/ | o 3:6b4280e33286@default(draft) merge | |\ +---x 2:474da87dd33b@default(draft) add _c | | | x 1:b3264cec9506@default(draft) add _a |/ o 0:b4952fcf48cf@default(draft) add base $ cd .. =============================================================================== Test instability resolution for a changeset unstable because its parent is obsolete with multiple successors all in one chain (simple split) ============================================================================== $ hg init test4 $ cd test4 $ mkcommits _a _b _c $ hg up "desc(_a)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ mkcommits bprimesplit1 bprimesplit2 created new head $ hg prune "desc(_b)" -s "desc(bprimesplit1) + desc(bprimesplit2)" --split 1 changesets pruned 1 new orphan changesets $ hg log -G @ 4:2a4ccc0bb20c@default(draft) add bprimesplit2 | o 3:8b87864bd0f4@default(draft) add bprimesplit1 | | o 2:102002290587@default(draft) add _c | | | x 1:37445b16603b@default(draft) add _b |/ o 0:135f39f4bd78@default(draft) add _a $ hg evo --all --any --orphan move:[2] add _c atop:[4] add bprimesplit2 working directory is now at 387cc1e837d7 $ hg log -G @ 5:387cc1e837d7@default(draft) add _c | o 4:2a4ccc0bb20c@default(draft) add bprimesplit2 | o 3:8b87864bd0f4@default(draft) add bprimesplit1 | o 0:135f39f4bd78@default(draft) add _a $ cd .. =============================================================================== Test instability resolution for a changeset unstable because its parent is obsolete with multiple successors on one branches but in reverse order (cross-split). ============================================================================== $ hg init test5 $ cd test5 $ mkcommits _a _b _c $ hg up "desc(_a)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ mkcommits bprimesplit1 bprimesplit2 created new head $ hg prune "desc(_b)" -s "desc(bprimesplit1) + desc(bprimesplit2)" --split 1 changesets pruned 1 new orphan changesets $ hg up "desc(_a)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ mkcommits bsecondsplit1 bsecondsplit2 created new head $ hg prune "desc(bprimesplit1)" -s "desc(bsecondsplit2)" 1 changesets pruned 1 new orphan changesets $ hg prune "desc(bprimesplit2)" -s "desc(bsecondsplit1)" 1 changesets pruned $ hg log -G @ 6:59b942dbda14@default(draft) add bsecondsplit2 | o 5:8ffdae67d696@default(draft) add bsecondsplit1 | | o 2:102002290587@default(draft) add _c | | | x 1:37445b16603b@default(draft) add _b |/ o 0:135f39f4bd78@default(draft) add _a $ hg evo --all --any --orphan move:[2] add _c atop:[6] add bsecondsplit2 working directory is now at 98e3f21461ff $ hg log -G @ 7:98e3f21461ff@default(draft) add _c | o 6:59b942dbda14@default(draft) add bsecondsplit2 | o 5:8ffdae67d696@default(draft) add bsecondsplit1 | o 0:135f39f4bd78@default(draft) add _a $ cd .. =============================================================================== Test instability resolution for a changeset unstable because its parent is obsolete with multiple successors on two branches. Not supported yet ============================================================================== $ hg init test6 $ cd test6 $ mkcommits _a _b _c $ hg up "desc(_a)" 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ mkcommit bprimesplit1 created new head $ hg up "desc(_a)" 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit bprimesplit2 created new head $ hg prune "desc(_b)" -s "desc(bprimesplit1) + desc(bprimesplit2)" --split 1 changesets pruned 1 new orphan changesets $ hg log -G @ 4:3c69ea6aa93e@default(draft) add bprimesplit2 | | o 3:8b87864bd0f4@default(draft) add bprimesplit1 |/ | o 2:102002290587@default(draft) add _c | | | x 1:37445b16603b@default(draft) add _b |/ o 0:135f39f4bd78@default(draft) add _a $ hg evo --all --any --orphan cannot solve split across two branches $ hg log -G @ 4:3c69ea6aa93e@default(draft) add bprimesplit2 | | o 3:8b87864bd0f4@default(draft) add bprimesplit1 |/ | o 2:102002290587@default(draft) add _c | | | x 1:37445b16603b@default(draft) add _b |/ o 0:135f39f4bd78@default(draft) add _a $ cd ..