Mercurial > evolve
view tests/test-evolve.t @ 296:c3ff47e6bd36
test-evolve: extend output and exhibit an amend bug
The extended section shows the parent revision stabilizing itself on
another revision, without --any. In theory, only descendants of the
parent predecessors or of its descendants should be stabilized, and be
stabilized in parent subtree. Unfortunately, stabilize implementation
correctly picks the changesets to stabilize but not their target.
This problem is aggravated by amend registering too many obsolete
markers which prevents the stabilize selection heuristic to prune
several changesets.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 21 Jun 2012 18:00:32 +0200 |
parents | 6c6bb7a23bb5 |
children | d68ccae92d52 |
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 "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH $ 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 simple kill $ hg kill 5 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) $ 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 $ hg amend --note 'french looks better' 1 new unstables 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 1 Working directory parent is obsolete $ glog --hidden o 6:23409eba69a0@default(draft) a nifty feature | | o 5:e416e48b2742@default(secret) french looks better | | | | o 4:f8111a076f09@default(draft) another feature | |/ | | o 3:524e478d4811@default(secret) fix spelling of Zwei | | | | | o 2:7b36850622b2@default(secret) another feature | |/ | @ 1:568a468b60fc@default(draft) a nifty feature |/ o 0:e55e0562ee93@default(draft) base $ hg debugsuccessors 524e478d4811 f8111a076f09 568a468b60fc 23409eba69a0 568a468b60fc e416e48b2742 7b36850622b2 524e478d4811 7b36850622b2 f8111a076f09 e416e48b2742 23409eba69a0 $ hg stabilize 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 $ 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