Mercurial > evolve
view tests/test-evolve.t @ 549:b047e9417d96 stable
Properly update after fold
The previous version only set the parent, it did not rebuilt dirstate or update
any file content.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Mon, 10 Sep 2012 18:56:44 +0200 |
parents | 7ecd41520dae |
children | e29561d918a6 |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [defaults] > amend=-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.rebase= > hgext.graphlog= > EOF $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } $ glog() { > hg glog --template '{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n' "$@" > } 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 obsolete immutable changeset: 7c3bad9141dc [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 $ 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 3 0 files updated, 0 files merged, 1 files removed, 0 files unresolved working directory now at 7c3bad9141dc $ 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 $ hg st A g $ 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" So here we are:: $ hg book feature-A 1:568a468b60fc * feature-B 2:7b36850622b2 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 --note "fix spelling of Zwei" The `--note` is our commit message for the *update* only. So its only purpose is to document the evolution of the changeset. If we use `--message` with `amend`, it replaces the commit message of the changeset itself. 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 - 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 $ hg amend -c 2 abort: cannot amend non ancestor changeset [255] (amend of on ancestors) $ hg amend -c 2 abort: cannot amend non ancestor changeset [255] $ hg amend --note 'french looks better' 1 new unstable changesets $ hg log 6 feature-A: a nifty feature - test 4 feature-B: another feature - test 1 : a nifty feature - test 0 : base - test $ hg up -q 0 $ glog --hidden o 6:23409eba69a0@default(draft) a nifty feature | | x 5:e416e48b2742@default(draft) french looks better | | | | o 4:f8111a076f09@default(draft) another feature | |/ | | x 3:524e478d4811@default(draft) fix spelling of Zwei | | | | | x 2:7b36850622b2@default(draft) another feature | |/ | x 1:568a468b60fc@default(draft) a nifty feature |/ @ 0:e55e0562ee93@default(public) base $ hg debugobsolete 524e478d4811d405c8771e4c441de4483bdf8b33 f8111a076f0975cbecb336e2bd3411be22b673fb 0 {'date': '* *', 'user': 'test'} (glob) 7b36850622b2fd159fa30a4fb2a1edd2043b4a14 f8111a076f0975cbecb336e2bd3411be22b673fb 0 {'date': '* *', 'user': 'test'} (glob) e416e48b27428695d00c2a2cc4a0b9619482e63f 23409eba69a0986e90cd42252852c1e6da97af5b 0 {'date': '* *', 'user': 'test'} (glob) 568a468b60fc99a42d5d4ddbe181caff1eef308d 23409eba69a0986e90cd42252852c1e6da97af5b 0 {'date': '* *', 'user': 'test'} (glob) $ hg evolve move:[4] another feature atop:[6] a nifty feature merging main-file-1 $ hg log 7 feature-B: another feature - 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 latecomer warning $ hg phase --public 7 1 new latecomer changesets all solving latecomer troubled $ hg glog @ 8 feature-B: another feature that rox - test | | o 7 : another feature - 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 computing new diff commited as 8d77fa12ab0c $ hg glog @ 9 feature-B: latecomer update to 5f4744038ed5: - test | o 7 : another feature - test | o 6 feature-A: a nifty feature - test | o 0 : base - test $ hg diff -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 'latecomer()' # no more latecomer $ 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()' saved backup bundle to $TESTTMP/alpha/.hg/strip-backup/e87767087a57-backup.hg $ 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 (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 revision 3 $ hg graft -r1 -o 2 grafting revision 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 {'date': '* *', 'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 {'date': '* *', '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 revision 7 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 $ hg graft --continue -O grafting revision 7 $ 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 {'date': '* *', 'user': 'test'} (glob) db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 {'date': '* *', 'user': 'test'} (glob) a5bfd90a2f29c7ccb8f917ff4e5013a9053d0a04 920e58bb443b73eea9d6d65570b4241051ea3229 0 {'date': '* *', '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 6::10 2 changesets folded 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 11:*@default(draft) add 1 (glob) | 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 log -r 11 --template '{desc}\n' 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 4::11 3 changesets folded 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ glog @ 12:*@default(draft) add 4 (glob) | | o 1:73d38bb17fd7@default(draft) add 1 |/ o 0:8685c6d34325@default(draft) add 0 $ 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 5 : add 3 - test 11 : add 1 - test