Mercurial > evolve
view tests/test-evolution.t @ 92:5b23cdf998d0
[evolution:amend] prevent amending immutable changeset.
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Tue, 20 Sep 2011 18:16:40 +0200 |
parents | 64fe5a4f877e |
children | 780a222d547d |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [web] > push_ssl = false > allow_push = * > [alias] > qlog = log --template='{rev} - {node|short} {desc} ({state})\n' > [diff] > git = 1 > unified = 0 > [extensions] > hgext.rebase= > EOF $ echo "states=$(echo $(dirname $TESTDIR))/hgext/states.py" >> $HGRCPATH $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH $ echo "evolution=$(echo $(dirname $TESTDIR))/hgext/evolution.py" >> $HGRCPATH $ mkcommit() { > echo "$1" > "$1" > hg add "$1" > hg ci -m "add $1" > } various init $ hg init local $ cd local $ hg states ready # XXX should be put in default config when state support it $ mkcommit a $ mkcommit b $ 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 published 1 $ hg qlog 5 - e44648563c73 add f (ready) 4 - fbb94e3a0ecf add e (ready) 3 - 47d2a3944de8 add d (ready) 2 - 4538525df7e2 add c (ready) 1 - 7c3bad9141dc add b (published) 0 - 1f0dee641bb7 add a (published) 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 (ready) 3 - 47d2a3944de8 add d (ready) 2 - 4538525df7e2 add c (ready) 1 - 7c3bad9141dc add b (published) 0 - 1f0dee641bb7 add a (published) 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 (ready) 1 - 7c3bad9141dc add b (published) 0 - 1f0dee641bb7 add a (published) $ 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 $ hg states ready $ 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 $ hg states ready 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 $ sed -i'' -e s/Eins/Un/ main-file-1 $ hg amend --note 'french looks better' $ hg log 6 feature-A: a nifty feature - test 4 feature-B: another feature - test 1 : a nifty feature - test 0 : base - test $ hg evolve hg relocate --rev 4 6 $ hg up feature-B -q #prevent feature-A bookmark to move grml $ hg relocate -r 4 6 --traceback merging main-file-1 $ hg log 7 feature-B: another feature - test 6 feature-A: a nifty feature - test 0 : base - test