# HG changeset patch # User Pierre-Yves David # Date 2012-10-12 19:41:08 # Node ID 57f27cbfc5bbff2b7f07a5f838247bd58d887972 # Parent c80a7a0c7d22f3a05c6d38ddf9b729fc6b153b83 histedit: refuse to edit public changeset Public changeset are immutable. This changeset enforce that in histedit. diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -588,8 +588,12 @@ def between(repo, old, new, keep): When keep is false, the specified set can't have children.""" revs = list(repo.set('%n::%n', old, new)) - if not keep and repo.revs('(%ld::) - (%ld + hidden())', revs, revs): - raise util.Abort(_('cannot edit history that would orphan nodes')) + if not keep: + if repo.revs('(%ld::) - (%ld + hidden())', revs, revs): + raise util.Abort(_('cannot edit history that would orphan nodes')) + root = min(revs) + if not root.phase(): + raise util.Abort(_('cannot edit immutable changeset: %s') % root) return [c.node() for c in revs] 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 @@ -121,3 +121,22 @@ check hidden revision are ignored (6 hav > EOF $ hg histedit 6 --commands commands.txt 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + + +Check that histedit respect phases +========================================= + +(not directly related to the test file but doesn't deserve it's own test case) + + $ hg log -G + @ 9:7c044e3e33a9 f + | + o 6:d36c0562f908 c + | + o 0:cb9a9f314b8b a + + $ hg ph -pv '.^' + phase changed for 2 changesets + $ hg histedit -r '.~2' + abort: cannot edit immutable changeset: cb9a9f314b8b + [255]