[PATCH STABLE] histedit: backout ebb5bb9bc32e

Laurent Charignon lcharignon at fb.com
Fri Jul 31 19:54:46 CDT 2015


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 at ens-lyon.org> wrote:
> 
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at 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 at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list