hg fold is not intuitive
anatoly techtonik
techtonik at gmail.com
Thu Nov 21 12:03:11 CST 2013
On Thu, Nov 21, 2013 at 8:34 PM, Harvey Chapman <hchapman at 3gfp.com> wrote:
> Having just watched the FOSDEM changeset evolution talk using the link from your recent summary post (thanks!), I can answer this.
>
> $ hg init
> $ for i in `seq 1 5 | tr '1-5' 'a-e'`; do echo $i >> file ; hg ci -Am "$i" ; done
> adding file
> $ hg gl
> @ changeset: 4:00bd9fbd59da tip draft
> | e
> o changeset: 3:920bf9496da5 draft
> | d
> o changeset: 2:111bcf660d83 draft
> | c
> o changeset: 1:0a80b76598ee draft
> | b
> o changeset: 0:8c66fa3030c3 draft
> a
> $ hg --config "extensions.evolve=`pwd`/../evolve/hgext/evolve.py" fold -r 1:3
> 3 changesets folded
> 1 new unstable changesets
> $ hg --config "extensions.evolve=`pwd`/../evolve/hgext/evolve.py" gl
> o changeset: 5:fd3700b9b46b tip draft
> | fold b-d
> | @ changeset: 4:00bd9fbd59da draft
> | | e
> | x changeset: 3:920bf9496da5 draft
> | | d
> | x changeset: 2:111bcf660d83 draft
> | | c
> | x changeset: 1:0a80b76598ee draft
> |/ b
> o changeset: 0:8c66fa3030c3 draft
> a
Right. At this stage I tried:
$ hg stabilize --dry-run
nothing to evolve here
(1 troubled changesets, do you want --any ?)
And it is not clear why there is nothing to evolve?
$ hg up
abort: not a linear update
(merge or update --check to force update)
$ hg up -C
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg stabilize --dry-run
move:[189] Try alternative design on blockdiag.html page:
atop:[190] add readme.md with link to online demo
hg rebase -r 43185a19a6fe -d 45fb5e969b43
It is much more cryptic than before with MQ. In addition:
1. 'hg fold' failed after I closed editor, because username was not set
2. it is impossible to cancel 'hg fold' from editor
3. 'hg fold' doesn't understand -m switch
> $ hg --config "extensions.evolve=`pwd`/../evolve/hgext/evolve.py" evolve --any
> move:[4] e
> atop:[5] fold b-d
> merging file
> $ hg --config "extensions.evolve=`pwd`/../evolve/hgext/evolve.py" gl
> @ changeset: 6:44886e43ab12 tip draft
> | e
> o changeset: 5:fd3700b9b46b draft
> | fold b-d
> o changeset: 0:8c66fa3030c3 draft
> a
> $ hg --config "extensions.evolve=`pwd`/../evolve/hgext/evolve.py" gl --hidden
> @ changeset: 6:44886e43ab12 tip draft
> | e
> o changeset: 5:fd3700b9b46b draft
> | fold b-d
> | x changeset: 4:00bd9fbd59da draft
> | | e
> | x changeset: 3:920bf9496da5 draft
> | | d
> | x changeset: 2:111bcf660d83 draft
> | | c
> | x changeset: 1:0a80b76598ee draft
> |/ b
> o changeset: 0:8c66fa3030c3 draft
> a
I don't get why I need --any to move current changeset if all
operations are safe.
It is also unclear how to undo things - I think I issued a rebase command first
and got locked copy.
Also, after 'hg up -C' and 'hg evolve' my graph is different:
@ changeset: 191:dfe66ec9d2b2
|\ tag: tip
| | parent: 190:45fb5e969b43
| | parent: 189:43185a19a6fe
| |
| o changeset: 190:45fb5e969b43
| | parent: 185:bc342dc49d41
| |
x | changeset: 189:43185a19a6fe
| |
x | changeset: 188:09ff01b1d972
| |
x | changeset: 187:56687f8dd2d5
| |
x | changeset: 186:bce73b522aba
|/
|
o changeset: 185:bc342dc49d41
And 'evolve --all' fails with stacktrace.
$ hg stabilize --all
move:[189] Try alternative design on blockdiag.html page:
atop:[190] add readme.md with link to online demo
190 [<changectx 45fb5e969b43>, <changectx 43185a19a6fe>]
191
move:[191] Try alternative design on blockdiag.html page:
atop:[191] Try alternative design on blockdiag.html page:
** Unknown exception encountered with possibly-broken third-party
extension evolve
** which supports versions 2.5 of Mercurial.
** Please disable evolve and try your action again.
...
File "mercurial/util.pyc", line 512, in check
File ".../hgext/evolve.py", line 894, in evolve
result = _evolveany(ui, repo, tr, dryrunopt)
File ".../hgext/evolve.py", line 906, in _evolveany
return _solveunstable(ui, repo, tr, dryrunopt)
File ".../hgext/evolve.py", line 994, in _solveunstable
relocate(repo, orig, target)
File ".../hgext/evolve.py", line 770, in relocate
assert orig.p2().rev() == node.nullrev, 'no support yet'
AssertionError: no support yet
More information about the Mercurial
mailing list