Patchwork [STABLE] histedit: backout ebb5bb9bc32e

login
register
mail settings
Submitter Pierre-Yves David
Date July 31, 2015, 10:16 p.m.
Message ID <e67b959b84bc08754386.1438381011@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/10076/
State Accepted
Headers show

Comments

Pierre-Yves David - July 31, 2015, 10:16 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1438380667 25200
#      Fri Jul 31 15:11:07 2015 -0700
# Branch stable
# Node ID e67b959b84bc08754386fc0592c33d4079241b74
# Parent  79f0cb97d7537a7c2948f8f9b0a89148825a3a1d
histedit: backout ebb5bb9bc32e

The faulty changeset use obsolescence marker to roll the repository back on
--abort. This is a problematic approach because --abort should be as close as an
actually transaction rollback as possible stripping all created data from the
repository (cf `hg rebase --abort` stripping all created changesets). Instead
ebb5bb9bc32e made all content created during the aborted histedit still
available in the repository adding obsolescence marker to make them hidden. This
will cause trouble to evolution user as a re-run of the same histedit (with
success) will likely result in the very same node to be "recreated" while
obsolescence marker would be in place for them. And canceling an obsoletion is
still a fairly complicated process.

This also rollback using obsmarkers instead of strip to clean up temporary node
on successful histedit run because the two change were not split in separated
changeset. Rolling that part back does not have significant consequence a will
have to be resubmitted independently
Laurent Charignon - Aug. 1, 2015, 12:54 a.m.
This patch looks good to me.
ebb5bb9bc32e introduced an issue for evolve users and needs to be backed out.

Laurent

> On Jul 31, 2015, at 3:16 PM, Pierre-Yves David <pierre-yves.david@ens-lyon.org> wrote:
> 
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david@fb.com>
> # Date 1438380667 25200
> #      Fri Jul 31 15:11:07 2015 -0700
> # Branch stable
> # Node ID e67b959b84bc08754386fc0592c33d4079241b74
> # Parent  79f0cb97d7537a7c2948f8f9b0a89148825a3a1d
> histedit: backout ebb5bb9bc32e
> 
> The faulty changeset use obsolescence marker to roll the repository back on
> --abort. This is a problematic approach because --abort should be as close as an
> actually transaction rollback as possible stripping all created data from the
> repository (cf `hg rebase --abort` stripping all created changesets). Instead
> ebb5bb9bc32e made all content created during the aborted histedit still
> available in the repository adding obsolescence marker to make them hidden. This
> will cause trouble to evolution user as a re-run of the same histedit (with
> success) will likely result in the very same node to be "recreated" while
> obsolescence marker would be in place for them. And canceling an obsoletion is
> still a fairly complicated process.
> 
> This also rollback using obsmarkers instead of strip to clean up temporary node
> on successful histedit run because the two change were not split in separated
> changeset. Rolling that part back does not have significant consequence a will
> have to be resubmitted independently
> 
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -796,17 +796,12 @@ def _histedit(ui, repo, state, *freeargs
>             if n in parentnodes:
>                 hg.clean(repo, state.topmost)
>                 break
>         else:
>             pass
> -        if supportsmarkers:
> -            obsolete.createmarkers(repo,
> -                                   ((repo[t],()) for t in sorted(tmpnodes)))
> -            obsolete.createmarkers(repo, ((repo[t],()) for t in sorted(leafs)))
> -        else:
> -            cleanupnode(ui, repo, 'created', tmpnodes)
> -            cleanupnode(ui, repo, 'temp', leafs)
> +        cleanupnode(ui, repo, 'created', tmpnodes)
> +        cleanupnode(ui, repo, 'temp', leafs)
>         state.clear()
>         return
>     else:
>         cmdutil.checkunfinished(repo)
>         cmdutil.bailifchanged(repo)
> @@ -897,14 +892,12 @@ def _histedit(ui, repo, state, *freeargs
>                                 tuple(repo[s] for s in succs)))
>             if markers:
>                 obsolete.createmarkers(repo, markers)
>         else:
>             cleanupnode(ui, repo, 'replaced', mapping)
> -    if supportsmarkers:
> -        obsolete.createmarkers(repo, ((repo[t],()) for t in sorted(tmpnodes)))
> -    else:
> -        cleanupnode(ui, repo, 'temp', tmpnodes)
> +
> +    cleanupnode(ui, repo, 'temp', tmpnodes)
>     state.clear()
>     if os.path.exists(repo.sjoin('undo')):
>         os.unlink(repo.sjoin('undo'))
> 
> def bootstrapcontinue(ui, state, opts):
> diff --git a/tests/test-histedit-obsolete.t b/tests/test-histedit-obsolete.t
> --- a/tests/test-histedit-obsolete.t
> +++ b/tests/test-histedit-obsolete.t
> @@ -62,20 +62,16 @@ Enable obsolete
>> drop d2ae7f538514 1 b
>> pick 055a42cdd887 3 d
>> fold e860deea161a 4 e
>> pick 652413bf663e 5 f
>> EOF
> -  [1]
> +  saved backup bundle to $TESTTMP/base/.hg/strip-backup/96e494a2d553-3c6c5d92-backup.hg (glob)
>   $ hg log --graph --hidden
> -  @  10:cacdfd884a93 f
> +  @  8:cacdfd884a93 f
>   |
> -  o  9:59d9f330561f d
> +  o  7:59d9f330561f d
>   |
> -  | x  8:b558abc46d09 fold-temp-revision e860deea161a
> -  | |
> -  | x  7:96e494a2d553 d
> -  |/
>   o  6:b346ab9a313d c
>   |
>   | x  5:652413bf663e f
>   | |
>   | x  4:e860deea161a e
> @@ -92,12 +88,10 @@ Enable obsolete
>   d2ae7f538514cd87c17547b0de4cea71fe1af9fb 0 {cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b} (*) {'user': 'test'} (glob)
>   177f92b773850b59254aa5e923436f921b55483b b346ab9a313db8537ecf96fca3ca3ca984ef3bd7 0 (*) {'user': 'test'} (glob)
>   055a42cdd88768532f9cf79daa407fc8d138de9b 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
>   e860deea161a2f77de56603b340ebbb4536308ae 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
>   652413bf663ef2a641cab26574e46d5f5a64a55a cacdfd884a9321ec4e1de275ef3949fa953a1f83 0 (*) {'user': 'test'} (glob)
> -  96e494a2d553dd05902ba1cee1d94d4cb7b8faed 0 {b346ab9a313db8537ecf96fca3ca3ca984ef3bd7} (*) {'user': 'test'} (glob)
> -  b558abc46d09c30f57ac31e85a8a3d64d2e906e4 0 {96e494a2d553dd05902ba1cee1d94d4cb7b8faed} (*) {'user': 'test'} (glob)
> 
> 
> Ensure hidden revision does not prevent histedit
> -------------------------------------------------
> 
> @@ -109,11 +103,11 @@ create an hidden revision
>> pick cacdfd884a93 8 f
>> EOF
>   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg log --graph
> -  @  11:c13eb81022ca f
> +  @  9:c13eb81022ca f
>   |
>   o  6:b346ab9a313d c
>   |
>   o  0:cb9a9f314b8b a
> 
> @@ -131,11 +125,11 @@ Test that rewriting leaving instability 
> ---------------------------------------------------------------------
> 
>   $ hg up '.^'
>   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
>   $ hg log -r 'children(.)'
> -  11:c13eb81022ca f (no-eol)
> +  9:c13eb81022ca f (no-eol)
>   $ hg histedit -r '.' --commands - <<EOF
>> edit b346ab9a313d 6 c
>> EOF
>   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
>   adding c
> @@ -145,16 +139,16 @@ Test that rewriting leaving instability 
>   $ echo c >> c
>   $ hg histedit --continue
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> 
>   $ hg log -r 'unstable()'
> -  11:c13eb81022ca f (no-eol)
> +  9:c13eb81022ca f (no-eol)
> 
> stabilise
> 
>   $ hg rebase  -r 'unstable()' -d .
> -  rebasing 11:c13eb81022ca "f"
> +  rebasing 9:c13eb81022ca "f"
>   $ hg up tip -q
> 
> Test dropping of changeset on the top of the stack
> -------------------------------------------------------
> 
> @@ -170,11 +164,11 @@ dropped changeset to be hidden.
>> pick 40db8afa467b 10 c
>> drop b449568bf7fc 11 f
>> EOF
>   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
>   $ hg log -G
> -  @  12:40db8afa467b c
> +  @  10:40db8afa467b c
>   |
>   o  0:cb9a9f314b8b a
> 
> 
> With rewritten ancestors
> @@ -192,13 +186,13 @@ With rewritten ancestors
>> EOF
>   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg log -G
> -  @  17:ee6544123ab8 c
> +  @  15:ee6544123ab8 c
>   |
> -  o  16:269e713e9eae g
> +  o  14:269e713e9eae g
>   |
>   o  0:cb9a9f314b8b a
> 
>   $ cd ../base
> 
> @@ -216,13 +210,13 @@ Check that histedit respect immutability
>> EOF
> 
>   $ hg ph -pv '.^'
>   phase changed for 2 changesets
>   $ hg log -G
> -  @  13:b449568bf7fc (draft) f
> +  @  11:b449568bf7fc (draft) f
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
>   $ hg histedit -r '.~2'
>   abort: cannot edit public changeset: cb9a9f314b8b
> @@ -238,23 +232,23 @@ Prepare further testing
>>    hg add $x
>>    hg ci -m $x
>> done
>   $ hg phase --force --secret .~2
>   $ hg log -G
> -  @  18:ee118ab9fa44 (secret) k
> +  @  16:ee118ab9fa44 (secret) k
>   |
> -  o  17:3a6c53ee7f3d (secret) j
> +  o  15:3a6c53ee7f3d (secret) j
>   |
> -  o  16:b605fb7503f2 (secret) i
> +  o  14:b605fb7503f2 (secret) i
>   |
> -  o  15:7395e1ff83bd (draft) h
> +  o  13:7395e1ff83bd (draft) h
>   |
> -  o  14:6b70183d2492 (draft) g
> +  o  12:6b70183d2492 (draft) g
>   |
> -  o  13:b449568bf7fc (draft) f
> +  o  11:b449568bf7fc (draft) f
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
>   $ cd ..
> 
> @@ -288,23 +282,23 @@ New-commit as draft (default)
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg log -G
> -  @  24:12e89af74238 (secret) k
> +  @  22:12e89af74238 (secret) k
>   |
> -  o  23:636a8687b22e (secret) j
> +  o  21:636a8687b22e (secret) j
>   |
> -  o  22:ccaf0a38653f (secret) i
> +  o  20:ccaf0a38653f (secret) i
>   |
> -  o  21:11a89d1c2613 (draft) h
> +  o  19:11a89d1c2613 (draft) h
>   |
> -  o  20:c1dec7ca82ea (draft) g
> +  o  18:c1dec7ca82ea (draft) g
>   |
> -  o  19:087281e68428 (draft) f
> +  o  17:087281e68428 (draft) f
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
>   $ cd ..
> 
> @@ -337,23 +331,23 @@ New-commit as draft (default)
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg log -G
> -  @  24:12e89af74238 (secret) k
> +  @  22:12e89af74238 (secret) k
>   |
> -  o  23:636a8687b22e (secret) j
> +  o  21:636a8687b22e (secret) j
>   |
> -  o  22:ccaf0a38653f (secret) i
> +  o  20:ccaf0a38653f (secret) i
>   |
> -  o  21:11a89d1c2613 (draft) h
> +  o  19:11a89d1c2613 (draft) h
>   |
> -  o  20:c1dec7ca82ea (draft) g
> +  o  18:c1dec7ca82ea (draft) g
>   |
> -  o  19:087281e68428 (draft) f
> +  o  17:087281e68428 (draft) f
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
>   $ cd ..
> 
> @@ -379,23 +373,23 @@ It seems more important to present the s
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg log -G
> -  @  23:558246857888 (secret) k
> +  @  21:558246857888 (secret) k
>   |
> -  o  22:28bd44768535 (secret) h
> +  o  20:28bd44768535 (secret) h
>   |
> -  o  21:d5395202aeb9 (secret) i
> +  o  19:d5395202aeb9 (secret) i
>   |
> -  o  20:21edda8e341b (secret) g
> +  o  18:21edda8e341b (secret) g
>   |
> -  o  19:5ab64f3a4832 (secret) j
> +  o  17:5ab64f3a4832 (secret) j
>   |
> -  o  13:b449568bf7fc (draft) f
> +  o  11:b449568bf7fc (draft) f
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
>   $ cd ..
> 
> @@ -432,32 +426,35 @@ Note that there is a few reordering in t
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
>   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/58019c66f35f-96092fce-backup.hg (glob)
> +  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/83d1858e070b-f3469cf8-backup.hg (glob)
> +  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/859969f5ed7e-d89a19d7-backup.hg (glob)
>   $ hg log -G
> -  @  27:f9daec13fb98 (secret) i
> +  @  19:f9daec13fb98 (secret) i
>   |
> -  o  24:49807617f46a (secret) g
> +  o  18:49807617f46a (secret) g
>   |
> -  o  21:050280826e04 (draft) h
> +  o  17:050280826e04 (draft) h
>   |
> -  o  12:40db8afa467b (public) c
> +  o  10:40db8afa467b (public) c
>   |
>   o  0:cb9a9f314b8b (public) a
> 
> -  $ hg co 24
> +  $ hg co 18
>   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
>   $ echo wat >> wat
>   $ hg add wat
>   $ hg ci -m 'add wat'
>   created new head
> -  $ hg merge 27
> +  $ hg merge 19
>   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   (branch merge, don't forget to commit)
>   $ hg ci -m 'merge'
>   $ echo not wat > wat
>   $ hg ci -m 'modify wat'
> -  $ hg histedit 21
> +  $ hg histedit 17
>   abort: cannot edit history that contains merges
>   [255]
>   $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
Martin von Zweigbergk - Aug. 3, 2015, 6:39 p.m.
Looks good to me too. I'll let mpm push it.

FWIW, I'm also happy to get rid of those temporary commits from history. I
agree with Pierre-Yves that they are an implementation detail that should
not be visible to the user (even with --hidden).

On Fri, Jul 31, 2015 at 5:55 PM Laurent Charignon <lcharignon@fb.com> wrote:

> This patch looks good to me.
> ebb5bb9bc32e introduced an issue for evolve users and needs to be backed
> out.
>
> Laurent
>
> > On Jul 31, 2015, at 3:16 PM, Pierre-Yves David <
> pierre-yves.david@ens-lyon.org> wrote:
> >
> > # HG changeset patch
> > # User Pierre-Yves David <pierre-yves.david@fb.com>
> > # Date 1438380667 25200
> > #      Fri Jul 31 15:11:07 2015 -0700
> > # Branch stable
> > # Node ID e67b959b84bc08754386fc0592c33d4079241b74
> > # Parent  79f0cb97d7537a7c2948f8f9b0a89148825a3a1d
> > histedit: backout ebb5bb9bc32e
> >
> > The faulty changeset use obsolescence marker to roll the repository back
> on
> > --abort. This is a problematic approach because --abort should be as
> close as an
> > actually transaction rollback as possible stripping all created data
> from the
> > repository (cf `hg rebase --abort` stripping all created changesets).
> Instead
> > ebb5bb9bc32e made all content created during the aborted histedit still
> > available in the repository adding obsolescence marker to make them
> hidden. This
> > will cause trouble to evolution user as a re-run of the same histedit
> (with
> > success) will likely result in the very same node to be "recreated" while
> > obsolescence marker would be in place for them. And canceling an
> obsoletion is
> > still a fairly complicated process.
> >
> > This also rollback using obsmarkers instead of strip to clean up
> temporary node
> > on successful histedit run because the two change were not split in
> separated
> > changeset. Rolling that part back does not have significant consequence
> a will
> > have to be resubmitted independently
> >
> > diff --git a/hgext/histedit.py b/hgext/histedit.py
> > --- a/hgext/histedit.py
> > +++ b/hgext/histedit.py
> > @@ -796,17 +796,12 @@ def _histedit(ui, repo, state, *freeargs
> >             if n in parentnodes:
> >                 hg.clean(repo, state.topmost)
> >                 break
> >         else:
> >             pass
> > -        if supportsmarkers:
> > -            obsolete.createmarkers(repo,
> > -                                   ((repo[t],()) for t in
> sorted(tmpnodes)))
> > -            obsolete.createmarkers(repo, ((repo[t],()) for t in
> sorted(leafs)))
> > -        else:
> > -            cleanupnode(ui, repo, 'created', tmpnodes)
> > -            cleanupnode(ui, repo, 'temp', leafs)
> > +        cleanupnode(ui, repo, 'created', tmpnodes)
> > +        cleanupnode(ui, repo, 'temp', leafs)
> >         state.clear()
> >         return
> >     else:
> >         cmdutil.checkunfinished(repo)
> >         cmdutil.bailifchanged(repo)
> > @@ -897,14 +892,12 @@ def _histedit(ui, repo, state, *freeargs
> >                                 tuple(repo[s] for s in succs)))
> >             if markers:
> >                 obsolete.createmarkers(repo, markers)
> >         else:
> >             cleanupnode(ui, repo, 'replaced', mapping)
> > -    if supportsmarkers:
> > -        obsolete.createmarkers(repo, ((repo[t],()) for t in
> sorted(tmpnodes)))
> > -    else:
> > -        cleanupnode(ui, repo, 'temp', tmpnodes)
> > +
> > +    cleanupnode(ui, repo, 'temp', tmpnodes)
> >     state.clear()
> >     if os.path.exists(repo.sjoin('undo')):
> >         os.unlink(repo.sjoin('undo'))
> >
> > def bootstrapcontinue(ui, state, opts):
> > diff --git a/tests/test-histedit-obsolete.t
> b/tests/test-histedit-obsolete.t
> > --- a/tests/test-histedit-obsolete.t
> > +++ b/tests/test-histedit-obsolete.t
> > @@ -62,20 +62,16 @@ Enable obsolete
> >> drop d2ae7f538514 1 b
> >> pick 055a42cdd887 3 d
> >> fold e860deea161a 4 e
> >> pick 652413bf663e 5 f
> >> EOF
> > -  [1]
> > +  saved backup bundle to
> $TESTTMP/base/.hg/strip-backup/96e494a2d553-3c6c5d92-backup.hg (glob)
> >   $ hg log --graph --hidden
> > -  @  10:cacdfd884a93 f
> > +  @  8:cacdfd884a93 f
> >   |
> > -  o  9:59d9f330561f d
> > +  o  7:59d9f330561f d
> >   |
> > -  | x  8:b558abc46d09 fold-temp-revision e860deea161a
> > -  | |
> > -  | x  7:96e494a2d553 d
> > -  |/
> >   o  6:b346ab9a313d c
> >   |
> >   | x  5:652413bf663e f
> >   | |
> >   | x  4:e860deea161a e
> > @@ -92,12 +88,10 @@ Enable obsolete
> >   d2ae7f538514cd87c17547b0de4cea71fe1af9fb 0
> {cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b} (*) {'user': 'test'} (glob)
> >   177f92b773850b59254aa5e923436f921b55483b
> b346ab9a313db8537ecf96fca3ca3ca984ef3bd7 0 (*) {'user': 'test'} (glob)
> >   055a42cdd88768532f9cf79daa407fc8d138de9b
> 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
> >   e860deea161a2f77de56603b340ebbb4536308ae
> 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
> >   652413bf663ef2a641cab26574e46d5f5a64a55a
> cacdfd884a9321ec4e1de275ef3949fa953a1f83 0 (*) {'user': 'test'} (glob)
> > -  96e494a2d553dd05902ba1cee1d94d4cb7b8faed 0
> {b346ab9a313db8537ecf96fca3ca3ca984ef3bd7} (*) {'user': 'test'} (glob)
> > -  b558abc46d09c30f57ac31e85a8a3d64d2e906e4 0
> {96e494a2d553dd05902ba1cee1d94d4cb7b8faed} (*) {'user': 'test'} (glob)
> >
> >
> > Ensure hidden revision does not prevent histedit
> > -------------------------------------------------
> >
> > @@ -109,11 +103,11 @@ create an hidden revision
> >> pick cacdfd884a93 8 f
> >> EOF
> >   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   $ hg log --graph
> > -  @  11:c13eb81022ca f
> > +  @  9:c13eb81022ca f
> >   |
> >   o  6:b346ab9a313d c
> >   |
> >   o  0:cb9a9f314b8b a
> >
> > @@ -131,11 +125,11 @@ Test that rewriting leaving instability
> > ---------------------------------------------------------------------
> >
> >   $ hg up '.^'
> >   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> >   $ hg log -r 'children(.)'
> > -  11:c13eb81022ca f (no-eol)
> > +  9:c13eb81022ca f (no-eol)
> >   $ hg histedit -r '.' --commands - <<EOF
> >> edit b346ab9a313d 6 c
> >> EOF
> >   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> >   adding c
> > @@ -145,16 +139,16 @@ Test that rewriting leaving instability
> >   $ echo c >> c
> >   $ hg histedit --continue
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >
> >   $ hg log -r 'unstable()'
> > -  11:c13eb81022ca f (no-eol)
> > +  9:c13eb81022ca f (no-eol)
> >
> > stabilise
> >
> >   $ hg rebase  -r 'unstable()' -d .
> > -  rebasing 11:c13eb81022ca "f"
> > +  rebasing 9:c13eb81022ca "f"
> >   $ hg up tip -q
> >
> > Test dropping of changeset on the top of the stack
> > -------------------------------------------------------
> >
> > @@ -170,11 +164,11 @@ dropped changeset to be hidden.
> >> pick 40db8afa467b 10 c
> >> drop b449568bf7fc 11 f
> >> EOF
> >   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> >   $ hg log -G
> > -  @  12:40db8afa467b c
> > +  @  10:40db8afa467b c
> >   |
> >   o  0:cb9a9f314b8b a
> >
> >
> > With rewritten ancestors
> > @@ -192,13 +186,13 @@ With rewritten ancestors
> >> EOF
> >   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   $ hg log -G
> > -  @  17:ee6544123ab8 c
> > +  @  15:ee6544123ab8 c
> >   |
> > -  o  16:269e713e9eae g
> > +  o  14:269e713e9eae g
> >   |
> >   o  0:cb9a9f314b8b a
> >
> >   $ cd ../base
> >
> > @@ -216,13 +210,13 @@ Check that histedit respect immutability
> >> EOF
> >
> >   $ hg ph -pv '.^'
> >   phase changed for 2 changesets
> >   $ hg log -G
> > -  @  13:b449568bf7fc (draft) f
> > +  @  11:b449568bf7fc (draft) f
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> >   $ hg histedit -r '.~2'
> >   abort: cannot edit public changeset: cb9a9f314b8b
> > @@ -238,23 +232,23 @@ Prepare further testing
> >>    hg add $x
> >>    hg ci -m $x
> >> done
> >   $ hg phase --force --secret .~2
> >   $ hg log -G
> > -  @  18:ee118ab9fa44 (secret) k
> > +  @  16:ee118ab9fa44 (secret) k
> >   |
> > -  o  17:3a6c53ee7f3d (secret) j
> > +  o  15:3a6c53ee7f3d (secret) j
> >   |
> > -  o  16:b605fb7503f2 (secret) i
> > +  o  14:b605fb7503f2 (secret) i
> >   |
> > -  o  15:7395e1ff83bd (draft) h
> > +  o  13:7395e1ff83bd (draft) h
> >   |
> > -  o  14:6b70183d2492 (draft) g
> > +  o  12:6b70183d2492 (draft) g
> >   |
> > -  o  13:b449568bf7fc (draft) f
> > +  o  11:b449568bf7fc (draft) f
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> >   $ cd ..
> >
> > @@ -288,23 +282,23 @@ New-commit as draft (default)
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   $ hg log -G
> > -  @  24:12e89af74238 (secret) k
> > +  @  22:12e89af74238 (secret) k
> >   |
> > -  o  23:636a8687b22e (secret) j
> > +  o  21:636a8687b22e (secret) j
> >   |
> > -  o  22:ccaf0a38653f (secret) i
> > +  o  20:ccaf0a38653f (secret) i
> >   |
> > -  o  21:11a89d1c2613 (draft) h
> > +  o  19:11a89d1c2613 (draft) h
> >   |
> > -  o  20:c1dec7ca82ea (draft) g
> > +  o  18:c1dec7ca82ea (draft) g
> >   |
> > -  o  19:087281e68428 (draft) f
> > +  o  17:087281e68428 (draft) f
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> >   $ cd ..
> >
> > @@ -337,23 +331,23 @@ New-commit as draft (default)
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   $ hg log -G
> > -  @  24:12e89af74238 (secret) k
> > +  @  22:12e89af74238 (secret) k
> >   |
> > -  o  23:636a8687b22e (secret) j
> > +  o  21:636a8687b22e (secret) j
> >   |
> > -  o  22:ccaf0a38653f (secret) i
> > +  o  20:ccaf0a38653f (secret) i
> >   |
> > -  o  21:11a89d1c2613 (draft) h
> > +  o  19:11a89d1c2613 (draft) h
> >   |
> > -  o  20:c1dec7ca82ea (draft) g
> > +  o  18:c1dec7ca82ea (draft) g
> >   |
> > -  o  19:087281e68428 (draft) f
> > +  o  17:087281e68428 (draft) f
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> >   $ cd ..
> >
> > @@ -379,23 +373,23 @@ It seems more important to present the s
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   $ hg log -G
> > -  @  23:558246857888 (secret) k
> > +  @  21:558246857888 (secret) k
> >   |
> > -  o  22:28bd44768535 (secret) h
> > +  o  20:28bd44768535 (secret) h
> >   |
> > -  o  21:d5395202aeb9 (secret) i
> > +  o  19:d5395202aeb9 (secret) i
> >   |
> > -  o  20:21edda8e341b (secret) g
> > +  o  18:21edda8e341b (secret) g
> >   |
> > -  o  19:5ab64f3a4832 (secret) j
> > +  o  17:5ab64f3a4832 (secret) j
> >   |
> > -  o  13:b449568bf7fc (draft) f
> > +  o  11:b449568bf7fc (draft) f
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> >   $ cd ..
> >
> > @@ -432,32 +426,35 @@ Note that there is a few reordering in t
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
> >   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > +  saved backup bundle to
> $TESTTMP/folding/.hg/strip-backup/58019c66f35f-96092fce-backup.hg (glob)
> > +  saved backup bundle to
> $TESTTMP/folding/.hg/strip-backup/83d1858e070b-f3469cf8-backup.hg (glob)
> > +  saved backup bundle to
> $TESTTMP/folding/.hg/strip-backup/859969f5ed7e-d89a19d7-backup.hg (glob)
> >   $ hg log -G
> > -  @  27:f9daec13fb98 (secret) i
> > +  @  19:f9daec13fb98 (secret) i
> >   |
> > -  o  24:49807617f46a (secret) g
> > +  o  18:49807617f46a (secret) g
> >   |
> > -  o  21:050280826e04 (draft) h
> > +  o  17:050280826e04 (draft) h
> >   |
> > -  o  12:40db8afa467b (public) c
> > +  o  10:40db8afa467b (public) c
> >   |
> >   o  0:cb9a9f314b8b (public) a
> >
> > -  $ hg co 24
> > +  $ hg co 18
> >   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
> >   $ echo wat >> wat
> >   $ hg add wat
> >   $ hg ci -m 'add wat'
> >   created new head
> > -  $ hg merge 27
> > +  $ hg merge 19
> >   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >   (branch merge, don't forget to commit)
> >   $ hg ci -m 'merge'
> >   $ echo not wat > wat
> >   $ hg ci -m 'modify wat'
> > -  $ hg histedit 21
> > +  $ hg histedit 17
> >   abort: cannot edit history that contains merges
> >   [255]
> >   $ cd ..
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel@selenic.com
> > https://selenic.com/mailman/listinfo/mercurial-devel
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
>
Pierre-Yves David - Aug. 3, 2015, 6:59 p.m.
On 08/03/2015 11:39 AM, Martin von Zweigbergk wrote:
> Looks good to me too. I'll let mpm push it.

Matt won't be back until next week… wink wink nudge nudge
Martin von Zweigbergk - Aug. 3, 2015, 8:26 p.m.
Pushed to the clowncopter (sorry, got interrupted by lunch and
forgetfulness).

On Mon, Aug 3, 2015 at 11:59 AM Pierre-Yves David <
pierre-yves.david@ens-lyon.org> wrote:

>
>
> On 08/03/2015 11:39 AM, Martin von Zweigbergk wrote:
> > Looks good to me too. I'll let mpm push it.
>
> Matt won't be back until next week… wink wink nudge nudge
>
> --
> Pierre-Yves David
>

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -796,17 +796,12 @@  def _histedit(ui, repo, state, *freeargs
             if n in parentnodes:
                 hg.clean(repo, state.topmost)
                 break
         else:
             pass
-        if supportsmarkers:
-            obsolete.createmarkers(repo,
-                                   ((repo[t],()) for t in sorted(tmpnodes)))
-            obsolete.createmarkers(repo, ((repo[t],()) for t in sorted(leafs)))
-        else:
-            cleanupnode(ui, repo, 'created', tmpnodes)
-            cleanupnode(ui, repo, 'temp', leafs)
+        cleanupnode(ui, repo, 'created', tmpnodes)
+        cleanupnode(ui, repo, 'temp', leafs)
         state.clear()
         return
     else:
         cmdutil.checkunfinished(repo)
         cmdutil.bailifchanged(repo)
@@ -897,14 +892,12 @@  def _histedit(ui, repo, state, *freeargs
                                 tuple(repo[s] for s in succs)))
             if markers:
                 obsolete.createmarkers(repo, markers)
         else:
             cleanupnode(ui, repo, 'replaced', mapping)
-    if supportsmarkers:
-        obsolete.createmarkers(repo, ((repo[t],()) for t in sorted(tmpnodes)))
-    else:
-        cleanupnode(ui, repo, 'temp', tmpnodes)
+
+    cleanupnode(ui, repo, 'temp', tmpnodes)
     state.clear()
     if os.path.exists(repo.sjoin('undo')):
         os.unlink(repo.sjoin('undo'))
 
 def bootstrapcontinue(ui, state, opts):
diff --git a/tests/test-histedit-obsolete.t b/tests/test-histedit-obsolete.t
--- a/tests/test-histedit-obsolete.t
+++ b/tests/test-histedit-obsolete.t
@@ -62,20 +62,16 @@  Enable obsolete
   > drop d2ae7f538514 1 b
   > pick 055a42cdd887 3 d
   > fold e860deea161a 4 e
   > pick 652413bf663e 5 f
   > EOF
-  [1]
+  saved backup bundle to $TESTTMP/base/.hg/strip-backup/96e494a2d553-3c6c5d92-backup.hg (glob)
   $ hg log --graph --hidden
-  @  10:cacdfd884a93 f
+  @  8:cacdfd884a93 f
   |
-  o  9:59d9f330561f d
+  o  7:59d9f330561f d
   |
-  | x  8:b558abc46d09 fold-temp-revision e860deea161a
-  | |
-  | x  7:96e494a2d553 d
-  |/
   o  6:b346ab9a313d c
   |
   | x  5:652413bf663e f
   | |
   | x  4:e860deea161a e
@@ -92,12 +88,10 @@  Enable obsolete
   d2ae7f538514cd87c17547b0de4cea71fe1af9fb 0 {cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b} (*) {'user': 'test'} (glob)
   177f92b773850b59254aa5e923436f921b55483b b346ab9a313db8537ecf96fca3ca3ca984ef3bd7 0 (*) {'user': 'test'} (glob)
   055a42cdd88768532f9cf79daa407fc8d138de9b 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
   e860deea161a2f77de56603b340ebbb4536308ae 59d9f330561fd6c88b1a6b32f0e45034d88db784 0 (*) {'user': 'test'} (glob)
   652413bf663ef2a641cab26574e46d5f5a64a55a cacdfd884a9321ec4e1de275ef3949fa953a1f83 0 (*) {'user': 'test'} (glob)
-  96e494a2d553dd05902ba1cee1d94d4cb7b8faed 0 {b346ab9a313db8537ecf96fca3ca3ca984ef3bd7} (*) {'user': 'test'} (glob)
-  b558abc46d09c30f57ac31e85a8a3d64d2e906e4 0 {96e494a2d553dd05902ba1cee1d94d4cb7b8faed} (*) {'user': 'test'} (glob)
 
 
 Ensure hidden revision does not prevent histedit
 -------------------------------------------------
 
@@ -109,11 +103,11 @@  create an hidden revision
   > pick cacdfd884a93 8 f
   > EOF
   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log --graph
-  @  11:c13eb81022ca f
+  @  9:c13eb81022ca f
   |
   o  6:b346ab9a313d c
   |
   o  0:cb9a9f314b8b a
   
@@ -131,11 +125,11 @@  Test that rewriting leaving instability 
 ---------------------------------------------------------------------
 
   $ hg up '.^'
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg log -r 'children(.)'
-  11:c13eb81022ca f (no-eol)
+  9:c13eb81022ca f (no-eol)
   $ hg histedit -r '.' --commands - <<EOF
   > edit b346ab9a313d 6 c
   > EOF
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   adding c
@@ -145,16 +139,16 @@  Test that rewriting leaving instability 
   $ echo c >> c
   $ hg histedit --continue
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
   $ hg log -r 'unstable()'
-  11:c13eb81022ca f (no-eol)
+  9:c13eb81022ca f (no-eol)
 
 stabilise
 
   $ hg rebase  -r 'unstable()' -d .
-  rebasing 11:c13eb81022ca "f"
+  rebasing 9:c13eb81022ca "f"
   $ hg up tip -q
 
 Test dropping of changeset on the top of the stack
 -------------------------------------------------------
 
@@ -170,11 +164,11 @@  dropped changeset to be hidden.
   > pick 40db8afa467b 10 c
   > drop b449568bf7fc 11 f
   > EOF
   0 files updated, 0 files merged, 1 files removed, 0 files unresolved
   $ hg log -G
-  @  12:40db8afa467b c
+  @  10:40db8afa467b c
   |
   o  0:cb9a9f314b8b a
   
 
 With rewritten ancestors
@@ -192,13 +186,13 @@  With rewritten ancestors
   > EOF
   0 files updated, 0 files merged, 3 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log -G
-  @  17:ee6544123ab8 c
+  @  15:ee6544123ab8 c
   |
-  o  16:269e713e9eae g
+  o  14:269e713e9eae g
   |
   o  0:cb9a9f314b8b a
   
   $ cd ../base
 
@@ -216,13 +210,13 @@  Check that histedit respect immutability
   > EOF
 
   $ hg ph -pv '.^'
   phase changed for 2 changesets
   $ hg log -G
-  @  13:b449568bf7fc (draft) f
+  @  11:b449568bf7fc (draft) f
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
   $ hg histedit -r '.~2'
   abort: cannot edit public changeset: cb9a9f314b8b
@@ -238,23 +232,23 @@  Prepare further testing
   >     hg add $x
   >     hg ci -m $x
   > done
   $ hg phase --force --secret .~2
   $ hg log -G
-  @  18:ee118ab9fa44 (secret) k
+  @  16:ee118ab9fa44 (secret) k
   |
-  o  17:3a6c53ee7f3d (secret) j
+  o  15:3a6c53ee7f3d (secret) j
   |
-  o  16:b605fb7503f2 (secret) i
+  o  14:b605fb7503f2 (secret) i
   |
-  o  15:7395e1ff83bd (draft) h
+  o  13:7395e1ff83bd (draft) h
   |
-  o  14:6b70183d2492 (draft) g
+  o  12:6b70183d2492 (draft) g
   |
-  o  13:b449568bf7fc (draft) f
+  o  11:b449568bf7fc (draft) f
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
   $ cd ..
 
@@ -288,23 +282,23 @@  New-commit as draft (default)
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log -G
-  @  24:12e89af74238 (secret) k
+  @  22:12e89af74238 (secret) k
   |
-  o  23:636a8687b22e (secret) j
+  o  21:636a8687b22e (secret) j
   |
-  o  22:ccaf0a38653f (secret) i
+  o  20:ccaf0a38653f (secret) i
   |
-  o  21:11a89d1c2613 (draft) h
+  o  19:11a89d1c2613 (draft) h
   |
-  o  20:c1dec7ca82ea (draft) g
+  o  18:c1dec7ca82ea (draft) g
   |
-  o  19:087281e68428 (draft) f
+  o  17:087281e68428 (draft) f
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
   $ cd ..
 
@@ -337,23 +331,23 @@  New-commit as draft (default)
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log -G
-  @  24:12e89af74238 (secret) k
+  @  22:12e89af74238 (secret) k
   |
-  o  23:636a8687b22e (secret) j
+  o  21:636a8687b22e (secret) j
   |
-  o  22:ccaf0a38653f (secret) i
+  o  20:ccaf0a38653f (secret) i
   |
-  o  21:11a89d1c2613 (draft) h
+  o  19:11a89d1c2613 (draft) h
   |
-  o  20:c1dec7ca82ea (draft) g
+  o  18:c1dec7ca82ea (draft) g
   |
-  o  19:087281e68428 (draft) f
+  o  17:087281e68428 (draft) f
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
   $ cd ..
 
@@ -379,23 +373,23 @@  It seems more important to present the s
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg log -G
-  @  23:558246857888 (secret) k
+  @  21:558246857888 (secret) k
   |
-  o  22:28bd44768535 (secret) h
+  o  20:28bd44768535 (secret) h
   |
-  o  21:d5395202aeb9 (secret) i
+  o  19:d5395202aeb9 (secret) i
   |
-  o  20:21edda8e341b (secret) g
+  o  18:21edda8e341b (secret) g
   |
-  o  19:5ab64f3a4832 (secret) j
+  o  17:5ab64f3a4832 (secret) j
   |
-  o  13:b449568bf7fc (draft) f
+  o  11:b449568bf7fc (draft) f
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
   $ cd ..
 
@@ -432,32 +426,35 @@  Note that there is a few reordering in t
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/58019c66f35f-96092fce-backup.hg (glob)
+  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/83d1858e070b-f3469cf8-backup.hg (glob)
+  saved backup bundle to $TESTTMP/folding/.hg/strip-backup/859969f5ed7e-d89a19d7-backup.hg (glob)
   $ hg log -G
-  @  27:f9daec13fb98 (secret) i
+  @  19:f9daec13fb98 (secret) i
   |
-  o  24:49807617f46a (secret) g
+  o  18:49807617f46a (secret) g
   |
-  o  21:050280826e04 (draft) h
+  o  17:050280826e04 (draft) h
   |
-  o  12:40db8afa467b (public) c
+  o  10:40db8afa467b (public) c
   |
   o  0:cb9a9f314b8b (public) a
   
-  $ hg co 24
+  $ hg co 18
   0 files updated, 0 files merged, 2 files removed, 0 files unresolved
   $ echo wat >> wat
   $ hg add wat
   $ hg ci -m 'add wat'
   created new head
-  $ hg merge 27
+  $ hg merge 19
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   $ hg ci -m 'merge'
   $ echo not wat > wat
   $ hg ci -m 'modify wat'
-  $ hg histedit 21
+  $ hg histedit 17
   abort: cannot edit history that contains merges
   [255]
   $ cd ..