Mercurial > evolve
view tests/test-evolve.t @ 1365:8ac1b7bd46ea
tests: ignores other core output in capability testing
This will avoid breaking the test anytime core changes.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Mon, 15 Jun 2015 17:44:12 -0700 |
parents | f00d91365ab9 |
children | 0799c5831a3d |
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 > [alias] > qlog = log --template='{rev} - {node|short} {desc} ({phase})\n' > [diff] > git = 1 > unified = 0 > [extensions] > hgext.graphlog= > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $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 $* > } $ glog() { > hg glog --template '{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n' "$@" > } $ shaof() { > hg log -T {node} -r "first(desc($1))" > } $ mkcommits() { > for i in $@; do mkcommit $i ; done > } various init $ hg init local $ cd local $ mkcommit a $ mkcommit b $ cat >> .hg/hgrc << EOF > [phases] > publish = True > EOF $ hg pull -q . # make 1 public $ rm .hg/hgrc $ mkcommit c $ mkcommit d $ hg up 1 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ mkcommit e -q created new head $ mkcommit f $ hg qlog 5 - e44648563c73 add f (draft) 4 - fbb94e3a0ecf add e (draft) 3 - 47d2a3944de8 add d (draft) 2 - 4538525df7e2 add c (draft) 1 - 7c3bad9141dc add b (public) 0 - 1f0dee641bb7 add a (public) test kill and immutable changeset $ hg log -r 1 --template '{rev} {phase} {obsolete}\n' 1 public stable $ hg kill 1 abort: cannot prune immutable changeset: 7c3bad9141dc (see "hg help phases" for details) [255] $ hg log -r 1 --template '{rev} {phase} {obsolete}\n' 1 public stable test simple kill $ hg id -n 5 $ hg kill . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at fbb94e3a0ecf 1 changesets pruned $ hg qlog 4 - fbb94e3a0ecf add e (draft) 3 - 47d2a3944de8 add d (draft) 2 - 4538525df7e2 add c (draft) 1 - 7c3bad9141dc add b (public) 0 - 1f0dee641bb7 add a (public) test multiple kill $ hg kill 4 -r 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at 7c3bad9141dc 2 changesets pruned $ hg qlog 2 - 4538525df7e2 add c (draft) 1 - 7c3bad9141dc add b (public) 0 - 1f0dee641bb7 add a (public) test kill with dirty changes $ hg up 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo 4 > g $ hg add g $ hg kill . 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at 7c3bad9141dc 1 changesets pruned $ hg st A g Smoketest debugobsrelsethashtree: $ hg debugobsrelsethashtree 1f0dee641bb7258c56bd60e93edfa2405381c41e 0000000000000000000000000000000000000000 7c3bad9141dcb46ff89abf5f61856facd56e476c * (glob) 4538525df7e2b9f09423636c61ef63a4cb872a2d * (glob) 47d2a3944de8b013de3be9578e8e344ea2e6c097 * (glob) fbb94e3a0ecf6d20c2cc31152ef162ce45af982f * (glob) e44648563c73f75950076031c6fdf06629de95f1 * (glob) $ cd .. ########################## importing Parren test ########################## $ cat << EOF >> $HGRCPATH > [ui] > logtemplate = "{rev}\t{bookmarks}: {desc|firstline} - {author|user}\n" > EOF Creating And Updating Changeset =============================== Setup the Base Repo ------------------- We start with a plain base repo:: $ hg init main; cd main $ cat >main-file-1 <<-EOF > One > > Two > > Three > EOF $ echo Two >main-file-2 $ hg add adding main-file-1 adding main-file-2 $ hg commit --message base $ cd .. and clone this into a new repo where we do our work:: $ hg clone main work updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd work Create First Patch ------------------ To begin with, we just do the changes that will be the initial version of the changeset:: $ echo One >file-from-A $ sed -i'' -e s/One/Eins/ main-file-1 $ hg add file-from-A So this is what we would like our changeset to be:: $ hg diff diff --git a/file-from-A b/file-from-A new file mode 100644 --- /dev/null +++ b/file-from-A @@ -0,0 +1,1 @@ +One diff --git a/main-file-1 b/main-file-1 --- a/main-file-1 +++ b/main-file-1 @@ -1,1 +1,1 @@ -One +Eins To commit it we just - commit it:: $ hg commit --message "a nifty feature" and place a bookmark so we can easily refer to it again (which we could have done before the commit):: $ hg book feature-A Create Second Patch ------------------- Let's do this again for the second changeset:: $ echo Two >file-from-B $ sed -i'' -e s/Two/Zwie/ main-file-1 $ hg add file-from-B Before committing, however, we need to switch to a new bookmark for the second changeset. Otherwise we would inadvertently move the bookmark for our first changeset. It is therefore advisable to always set the bookmark before committing:: $ hg book feature-B $ hg commit --message "another feature (child of $(hg log -r . -T '{node|short}'))" So here we are:: $ hg book feature-A 1:568a468b60fc * feature-B 2:73296a82292a Fix The Second Patch -------------------- There's a typo in feature-B. We spelled *Zwie* instead of *Zwei*:: $ hg diff --change tip | grep -F Zwie +Zwie Fixing this is very easy. Just change:: $ sed -i'' -e s/Zwie/Zwei/ main-file-1 and **amend**:: $ hg amend This results in a new single changeset for our amended changeset, and the old changeset plus the updating changeset are hidden from view by default:: $ hg log 4 feature-B: another feature (child of 568a468b60fc) - test 1 feature-A: a nifty feature - test 0 : base - test $ hg up feature-A -q $ hg bookmark -i feature-A $ sed -i'' -e s/Eins/Un/ main-file-1 (amend of public changeset denied) $ hg phase --public 0 -v phase changed for 1 changesets (amend of on ancestors) $ hg amend 1 new unstable changesets $ hg log 6 feature-A: a nifty feature - test 4 feature-B: another feature (child of 568a468b60fc) - test 1 : a nifty feature - test 0 : base - test $ hg up -q 0 $ glog --hidden o 6:ba0ec09b1bab@default(draft) a nifty feature | | x 5:c296b79833d1@default(draft) temporary amend commit for 568a468b60fc | | | | o 4:6992c59c6b06@default(draft) another feature (child of 568a468b60fc) | |/ | | x 3:c97947cdc7a2@default(draft) temporary amend commit for 73296a82292a | | | | | x 2:73296a82292a@default(draft) another feature (child of 568a468b60fc) | |/ | x 1:568a468b60fc@default(draft) a nifty feature |/ @ 0:e55e0562ee93@default(public) base $ hg debugobsolete 73296a82292a76fb8a7061969d2489ec0d84cd5e 6992c59c6b06a1b4a92e24ff884829ae026d018b 0 (*) {'user': 'test'} (glob) c97947cdc7a2a11cf78419f5c2c3dd3944ec79e8 0 {73296a82292a76fb8a7061969d2489ec0d84cd5e} (*) {'user': 'test'} (glob) 568a468b60fc99a42d5d4ddbe181caff1eef308d ba0ec09b1babf3489b567853807f452edd46704f 0 (*) {'user': 'test'} (glob) c296b79833d1d497f33144786174bf35e04e44a3 0 {568a468b60fc99a42d5d4ddbe181caff1eef308d} (*) {'user': 'test'} (glob) $ hg evolve move:[4] another feature (child of 568a468b60fc) atop:[6] a nifty feature merging main-file-1 working directory is now at 5c9c8d9c2e4e $ hg log 7 feature-B: another feature (child of ba0ec09b1bab) - test 6 feature-A: a nifty feature - test 0 : base - test Test commit -o options $ hg up 6 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg revert -r 7 --all adding file-from-B reverting main-file-1 $ sed -i'' -e s/Zwei/deux/ main-file-1 $ hg commit -m 'another feature that rox' -o 7 created new head $ hg log 8 feature-B: another feature that rox - test 6 feature-A: a nifty feature - test 0 : base - test phase change turning obsolete changeset public issue a bumped warning $ hg phase --hidden --public 7 1 new bumped changesets all solving bumped troubled $ hg glog @ 8 feature-B: another feature that rox - test | | o 7 : another feature (child of ba0ec09b1bab) - test |/ o 6 feature-A: a nifty feature - test | o 0 : base - test $ hg evolve --any --traceback recreate:[8] another feature that rox atop:[7] another feature (child of ba0ec09b1bab) computing new diff committed as 476d0454d60e working directory is now at 476d0454d60e $ hg glog @ 9 feature-B: bumped update to 5c9c8d9c2e4e: - test | o 7 : another feature (child of ba0ec09b1bab) - test | o 6 feature-A: a nifty feature - test | o 0 : base - test $ hg diff --hidden -r 9 -r 8 $ hg diff -r 9^ -r 9 diff --git a/main-file-1 b/main-file-1 --- a/main-file-1 +++ b/main-file-1 @@ -3,1 +3,1 @@ -Zwei +deux $ hg log -r 'bumped()' # no more bumped test evolve --all $ sed -i'' -e s/deux/to/ main-file-1 $ hg commit -m 'dansk 2!' $ sed -i'' -e s/Three/tre/ main-file-1 $ hg commit -m 'dansk 3!' $ hg update 9 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ sed -i'' -e s/Un/Én/ main-file-1 $ hg commit --amend -m 'dansk!' 2 new unstable changesets (ninja test for the {trouble} template: $ hg log -G --template '{rev} {troubles}\n' @ 13 | | o 11 unstable | | | o 10 unstable | | | x 9 |/ o 7 | o 6 | o 0 (/ninja) $ hg evolve --all --traceback move:[10] dansk 2! atop:[13] dansk! merging main-file-1 move:[11] dansk 3! atop:[14] dansk 2! merging main-file-1 working directory is now at cfb5ebed336d $ hg glog @ 15 : dansk 3! - test | o 14 : dansk 2! - test | o 13 feature-B: dansk! - test | o 7 : another feature (child of ba0ec09b1bab) - test | o 6 feature-A: a nifty feature - test | o 0 : base - test $ cd .. enable general delta $ cat << EOF >> $HGRCPATH > [format] > generaldelta=1 > EOF $ hg init alpha $ cd alpha $ echo 'base' > firstfile $ hg add firstfile $ hg ci -m 'base' $ cd .. $ hg clone -Ur 0 alpha beta adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files $ cd alpha $ cat << EOF > A > We > need > some > kind > of > file > big > enough > to > prevent > snapshot > . > yes > new > lines > are > useless > . > EOF $ hg add A $ hg commit -m 'adding A' $ hg mv A B $ echo '.' >> B $ hg amend -m 'add B' $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files 3 files, 4 changesets, 4 total revisions $ hg --config extensions.hgext.mq= strip 'extinct()' abort: empty revision set [255] $ hg --config extensions.hgext.mq= strip --hidden 'extinct()' saved backup bundle to $TESTTMP/alpha/.hg/strip-backup/e87767087a57-d7bd82e9-backup.hg (glob) $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files 2 files, 2 changesets, 2 total revisions $ cd .. Clone just this branch $ cd beta $ hg pull -r tip ../alpha pulling from ../alpha searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files 2 new obsolescence markers (run 'hg update' to get a working copy) $ hg up 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd .. Test graft --obsolete/--old-obsolete $ hg init test-graft $ cd test-graft $ mkcommit 0 $ mkcommit 1 $ mkcommit 2 $ mkcommit 3 $ hg up -qC 0 $ mkcommit 4 created new head $ glog --hidden @ 4:ce341209337f@default(draft) add 4 | | o 3:0e84df4912da@default(draft) add 3 | | | o 2:db038628b9e5@default(draft) add 2 | | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg graft -r3 -O grafting 3:0e84df4912da "add 3" $ hg graft -r1 -o 2 grafting 1:73d38bb17fd7 "add 1" $ glog --hidden @ 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | x 3:0e84df4912da@default(draft) add 3 | | | x 2:db038628b9e5@default(draft) add 2 | | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg debugobsolete 0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae9 0b9e50c35132ff548ec0065caea6a87e1ebcef32 0 (*) {'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 (*) {'user': 'test'} (glob) Test graft --continue $ hg up -qC 0 $ echo 2 > 1 $ hg ci -Am conflict 1 created new head $ hg up -qC 6 $ hg graft -O 7 grafting 7:a5bfd90a2f29 "conflict" (tip) merging 1 warning: conflicts during merge. merging 1 incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts, can't continue (use hg resolve and hg graft --continue) [255] $ hg log -r7 --template '{rev}:{node|short} {obsolete}\n' 7:a5bfd90a2f29 stable $ echo 3 > 1 $ hg resolve -m 1 (no more unresolved files) $ hg graft --continue -O grafting 7:a5bfd90a2f29 "conflict" (tip) $ glog --hidden @ 8:920e58bb443b@default(draft) conflict | | x 7:a5bfd90a2f29@default(draft) conflict | | o | 6:acb28cd497b7@default(draft) add 1 | | o | 5:0b9e50c35132@default(draft) add 3 | | o | 4:ce341209337f@default(draft) add 4 |/ | x 3:0e84df4912da@default(draft) add 3 | | | x 2:db038628b9e5@default(draft) add 2 | | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg debugobsolete 0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae9 0b9e50c35132ff548ec0065caea6a87e1ebcef32 0 (*) {'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 (*) {'user': 'test'} (glob) a5bfd90a2f29c7ccb8f917ff4e5013a9053d0a04 920e58bb443b73eea9d6d65570b4241051ea3229 0 (*) {'user': 'test'} (glob) Test touch $ glog @ 8:920e58bb443b@default(draft) conflict | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg touch $ glog @ 9:*@default(draft) conflict (glob) | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ hg touch . $ glog @ 10:*@default(draft) conflict (glob) | o 6:acb28cd497b7@default(draft) add 1 | o 5:0b9e50c35132@default(draft) add 3 | o 4:ce341209337f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 Test fold $ rm *.orig $ hg fold abort: no revisions specified [255] $ hg fold . single revision specified, nothing to fold [1] $ hg fold 0::10 --rev 1 --exact abort: cannot fold non-linear revisions (multiple heads given) [255] $ hg fold -r 4 -r 6 --exact abort: cannot fold non-linear revisions (multiple roots given) [255] $ hg fold 10 1 abort: cannot fold non-linear revisions (given revisions are unrelated to parent of working directory) [255] $ hg phase --public 0 $ hg fold -r 0 abort: cannot fold public revisions [255] $ hg fold -r 5 3 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg fold 6 # want to run hg fold 6 abort: hidden revision '6'! (use --hidden to access hidden revisions) [255] $ hg log -r 11 --template '{desc}\n' add 3 add 1 conflict $ hg debugrebuildstate $ hg st Test fold with wc parent is not the head of the folded revision $ hg up 4 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg fold --rev 4::11 --user victor --exact 2 changesets folded 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 12:d26d339c513f@default(draft) add 4 | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(public) add 0 $ hg log --template '{rev}: {author}\n' 12: victor 1: test 0: test $ hg log -r 12 --template '{desc}\n' add 4 add 3 add 1 conflict $ hg debugrebuildstate $ hg st Test olog $ hg olog 4 : add 4 - test 11 : add 3 - test Test obsstore stat $ hg debugobsstorestat markers total: 10 for known precursors: 10 with parents data: 0 markers with no successors: 0 1 successors: 10 2 successors: 0 more than 2 successors: 0 available keys: user: 10 disconnected clusters: 1 any known node: 1 smallest length: 10 longer length: 10 median length: 10 mean length: 10 using parents data: 1 any known node: 1 smallest length: 10 longer length: 10 median length: 10 mean length: 10 Test evolving renames $ hg up null 0 files updated, 0 files merged, 4 files removed, 0 files unresolved $ echo a > a $ hg ci -Am a adding a created new head $ echo b > b $ hg ci -Am b adding b $ hg mv a c $ hg ci -m c $ hg kill .^ 1 changesets pruned 1 new unstable changesets $ hg stab --any move:[15] c atop:[13] a working directory is now at 3742bde73477 $ hg st -C --change=tip A c a R a Test fold with commit messages $ cd ../work $ hg fold .^ --message "Folding with custom commit message" 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 16:d6239ff09c9f@default(draft) Folding with custom commit message | o 13:56ade053f46d@default(draft) dansk! | o 7:5c9c8d9c2e4e@default(public) another feature (child of ba0ec09b1bab) | o 6:ba0ec09b1bab@default(public) a nifty feature | o 0:e55e0562ee93@default(public) base $ cat > commit-message <<EOF > A longer > commit message > EOF $ hg fold .^ --logfile commit-message 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg qlog 17 - dba606655966 A longer commit message (draft) 7 - 5c9c8d9c2e4e another feature (child of ba0ec09b1bab) (public) 6 - ba0ec09b1bab a nifty feature (public) 0 - e55e0562ee93 base (public) $ cd .. Test branch preservation: =========================== $ hg init evolving-branch $ cd evolving-branch $ touch a $ hg add a $ hg ci -m 'a0' $ echo 1 > a $ hg ci -m 'a1' $ echo 2 > a $ hg ci -m 'a2' $ echo 3 > a $ hg ci -m 'a3' $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' @ 3 [default] a3 | o 2 [default] a2 | o 1 [default] a1 | o 0 [default] a0 branch change propagated $ hg up 'desc(a2)' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch mybranch marked working directory as branch mybranch (branches are permanent and global, did you want a bookmark?) $ hg amend 1 new unstable changesets $ hg evolve move:[3] a3 atop:[5] a2 working directory is now at 7c5649f73d11 $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' @ 6 [mybranch] a3 | o 5 [mybranch] a2 | o 1 [default] a1 | o 0 [default] a0 branch change preserved $ hg up 'desc(a1)' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg amend -m 'a1_' 2 new unstable changesets $ hg evolve move:[5] a2 atop:[7] a1_ working directory is now at 5406c5cfee42 $ hg evolve move:[6] a3 atop:[8] a2 working directory is now at c7661e655801 $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' @ 9 [mybranch] a3 | o 8 [mybranch] a2 | o 7 [default] a1_ | o 0 [default] a0 Evolve from the middle of a stack pick the right changesets. $ hg up 7 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg ci --amend -m 'a1__' 2 new unstable changesets $ hg up 8 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg evolve nothing to evolve here (2 troubled changesets, do you want --any ?) [2] Evolve disables active bookmarks. $ hg up 10 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg bookmark testbookmark $ ls .hg/bookmarks* .hg/bookmarks .hg/bookmarks.* (glob) $ hg evolve move:[8] a2 atop:[10] a1__ (leaving bookmark testbookmark) working directory is now at f37ed7a60f43 $ ls .hg/bookmarks* .hg/bookmarks Possibility to select what trouble to solve first, asking for bumped before divergent $ hg up 10 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg revert -r 11 --all reverting a $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n' o 11 [mybranch] a2 | @ 10 [default] a1__ | | o 9 [mybranch] a3 | | | x 8 [mybranch] a2 | | | x 7 [default] a1_ |/ o 0 [default] a0 $ echo "hello world" > newfile $ hg add newfile $ hg commit -m "add new file bumped" -o 11 $ hg phase --public --hidden 11 1 new bumped changesets $ hg glog @ 12 : add new file bumped - test | | o 11 : a2 - test |/ o 10 testbookmark: a1__ - test | | o 9 : a3 - test | | | x 8 : a2 - test | | | x 7 : a1_ - test |/ o 0 : a0 - test Now we have a bumped and an unstable changeset, we solve the bumped first normally the unstable changeset would be solve first $ hg glog @ 12 : add new file bumped - test | | o 11 : a2 - test |/ o 10 testbookmark: a1__ - test | | o 9 : a3 - test | | | x 8 : a2 - test | | | x 7 : a1_ - test |/ o 0 : a0 - test $ hg evolve -r 12 recreate:[12] add new file bumped atop:[11] a2 computing new diff committed as d66b1e328488 working directory is now at d66b1e328488 $ hg evolve --any move:[9] a3 atop:[13] bumped update to f37ed7a60f43: working directory is now at 7d2ce5f38f9b Check that we can resolve troubles in a revset with more than one commit $ hg up 14 -C 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkcommit gg $ hg up 14 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit gh created new head $ hg up 14 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "newline\nnewline" >> a $ hg glog o 16 : add gh - test | | o 15 : add gg - test |/ @ 14 : a3 - test | o 13 : bumped update to f37ed7a60f43: - test | o 11 : a2 - test | o 10 testbookmark: a1__ - test | o 0 : a0 - test $ hg amend 2 new unstable changesets $ hg glog @ 18 : a3 - test | | o 16 : add gh - test | | | | o 15 : add gg - test | |/ | x 14 : a3 - test |/ o 13 : bumped update to f37ed7a60f43: - test | o 11 : a2 - test | o 10 testbookmark: a1__ - test | o 0 : a0 - test Evolving an empty revset should do nothing $ hg evolve --rev "16 and 15" No troubled changes in the specified revisions $ hg evolve --rev "14::" move:[15] add gg atop:[18] a3 move:[16] add gh atop:[18] a3 working directory is now at db3d894869b0 $ hg glog @ 20 : add gh - test | | o 19 : add gg - test |/ o 18 : a3 - test | o 13 : bumped update to f37ed7a60f43: - test | o 11 : a2 - test | o 10 testbookmark: a1__ - test | o 0 : a0 - test Check hg evolve --rev on singled out commit $ hg up 19 -C 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit j1 $ mkcommit j2 $ mkcommit j3 $ hg up .^^ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo "hello" > j4 $ hg add j4 $ hg amend 2 new unstable changesets $ hg log -G @ 25 : add j1 - test | | o 23 : add j3 - test | | | o 22 : add j2 - test | | | x 21 : add j1 - test |/ | o 20 : add gh - test | | o | 19 : add gg - test |/ o 18 : a3 - test | o 13 : bumped update to f37ed7a60f43: - test | o 11 : a2 - test | o 10 testbookmark: a1__ - test | o 0 : a0 - test $ hg evolve --rev 23 cannot solve instability of c70048fd3350, skipping evolve --rev reordering ----------------------- evolve --rev reorders the rev to solve instability, trivial case 2 revs wrong order $ hg evolve --rev '23 + 22' move:[22] add j2 atop:[25] add j1 move:[23] add j3 atop:[26] add j2 working directory is now at 928e4c317356 Cleanup to make the tree cleaner $ hg prune 20 1 changesets pruned $ hg prune 26:: 0 files updated, 0 files merged, 2 files removed, 0 files unresolved working directory now at 4c0bc042ef3b 2 changesets pruned evolve --rev reorders the rev to solve instability. Harder case, obsolescence accross three stacks in growing rev numbers. $ hg up -C 25 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ mkstack 25 s1_ s2_ s3_ >/dev/null $ mkstack 25 s1prime s2prime >/dev/null $ mkstack 25 s1second >/dev/null $ hg prune `shaof s1_` -s `shaof s1prime` 1 changesets pruned 2 new unstable changesets $ hg prune `shaof s1prime` -s `shaof s1second` 1 changesets pruned 1 new unstable changesets $ hg prune `shaof s2_` -s `shaof s2prime` 1 changesets pruned $ glog -r "25::" @ 33:17b5b6ab3f43@default(draft) add s1second | | o 32:d694d85de729@default(draft) add s2prime | | | x 31:1ae988394dc5@default(draft) add s1prime |/ | o 30:819245647e79@default(draft) add s3_ | | | x 29:07a5fc5c1502@default(draft) add s2_ | | | x 28:5ccaf4765b80@default(draft) add s1_ |/ o 25:4c0bc042ef3b@default(draft) add j1 | $ hg evolve --rev "25::" move:[32] add s2prime atop:[33] add s1second move:[30] add s3_ atop:[34] add s2prime working directory is now at dc79646e43b4 $ glog -r "25::" @ 35:dc79646e43b4@default(draft) add s3_ | o 34:96f3ff6b7106@default(draft) add s2prime | o 33:17b5b6ab3f43@default(draft) add s1second | o 25:4c0bc042ef3b@default(draft) add j1 | $ hg prune 33:: 0 files updated, 0 files merged, 3 files removed, 0 files unresolved working directory now at 4c0bc042ef3b 3 changesets pruned Evolve --rev more complex case: two sets of stacks one with prune an no successor, the other one partially solvable First set of stack: $ mkstack 25 c1_ c2_ c3_ c4_ >/dev/null $ mkstack 25 c1prime c2prime >/dev/null $ mkstack 25 c1second >/dev/null $ hg prune `shaof c1_` -s `shaof c1prime` 1 changesets pruned 3 new unstable changesets $ hg prune `shaof c2_` -s `shaof c2prime` 1 changesets pruned $ hg prune `shaof c1prime` -s `shaof c1second` 1 changesets pruned 1 new unstable changesets Second set of stack with no successor for b2_: $ mkstack 25 b1_ b2_ b3_ b4_ >/dev/null $ mkstack 25 b1prime b3prime >/dev/null $ hg prune `shaof b1_` -s `shaof b1prime` 1 changesets pruned 3 new unstable changesets $ hg prune `shaof b3_` -s `shaof b3prime` 1 changesets pruned $ hg prune `shaof b2_` 1 changesets pruned $ glog -r "25::" @ 48:2b5cbe59aeca@default(draft) add b3prime | o 47:aa4f5bf8925e@default(draft) add b1prime | | o 46:26b828ec5bcf@default(draft) add b4_ | | | x 45:4f07e8c054ba@default(draft) add b3_ | | | x 44:3973f60bfa8c@default(draft) add b2_ | | | x 43:cddd50881a87@default(draft) add b1_ |/ | o 42:4a34f6744d4b@default(draft) add c1second |/ | o 41:1a00113a0d9a@default(draft) add c2prime | | | x 40:c19e337376fa@default(draft) add c1prime |/ | o 39:68e72c885d18@default(draft) add c4_ | | | o 38:28172de7eb73@default(draft) add c3_ | | | x 37:e2c8f75d4ecc@default(draft) add c2_ | | | x 36:4ce6da951588@default(draft) add c1_ |/ o 25:4c0bc042ef3b@default(draft) add j1 | Solve the full second stack and only part of the first one $ echo "(25::) - $(shaof c3_)" (25::) - 28172de7eb73578cf665e868a265caf2a2655c66 $ hg evolve --rev "(25::) - $(shaof c3_)" cannot solve instability of 68e72c885d18, skipping move:[41] add c2prime atop:[42] add c1second move:[46] add b4_ atop:[48] add b3prime working directory is now at e543e9e71376 Cleanup $ hg evolve --rev "(25::)" move:[38] add c3_ atop:[49] add c2prime move:[39] add c4_ atop:[51] add c3_ working directory is now at 456e647fbe11 $ glog -r "25::" @ 52:456e647fbe11@default(draft) add c4_ | o 51:07aaa06da467@default(draft) add c3_ | | o 50:e543e9e71376@default(draft) add b4_ | | o | 49:9379d7237601@default(draft) add c2prime | | | o 48:2b5cbe59aeca@default(draft) add b3prime | | | o 47:aa4f5bf8925e@default(draft) add b1prime | | o | 42:4a34f6744d4b@default(draft) add c1second |/ o 25:4c0bc042ef3b@default(draft) add j1 | Check that uncommit respects the allowunstable option With only createmarkers we can only uncommit on a head $ hg up 456e647fbe11 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat >> $HGRCPATH <<EOF > [experimental] > evolution=createmarkers, allnewcommands > EOF $ glog -r "25::" @ 52:456e647fbe11@default(draft) add c4_ | o 51:07aaa06da467@default(draft) add c3_ | | o 50:e543e9e71376@default(draft) add b4_ | | o | 49:9379d7237601@default(draft) add c2prime | | | o 48:2b5cbe59aeca@default(draft) add b3prime | | | o 47:aa4f5bf8925e@default(draft) add b1prime | | o | 42:4a34f6744d4b@default(draft) add c1second |/ o 25:4c0bc042ef3b@default(draft) add j1 | $ hg up .^ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg uncommit --all abort: cannot uncommit in the middle of a stack [255] $ hg up 456e647fbe11 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg uncommit --all new changeset is empty (use "hg prune ." to remove it) $ hg up e543e9e71376 -C 3 files updated, 0 files merged, 3 files removed, 0 files unresolved $ glog -r "25::" o 53:897e7966b9ef@default(draft) add c4_ | o 51:07aaa06da467@default(draft) add c3_ | | @ 50:e543e9e71376@default(draft) add b4_ | | o | 49:9379d7237601@default(draft) add c2prime | | | o 48:2b5cbe59aeca@default(draft) add b3prime | | | o 47:aa4f5bf8925e@default(draft) add b1prime | | o | 42:4a34f6744d4b@default(draft) add c1second |/ o 25:4c0bc042ef3b@default(draft) add j1 |