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