histedit: refuse to edit public changeset
Public changeset are immutable. This changeset enforce that in histedit.
--- a/hgext/histedit.py Thu Sep 27 14:00:52 2012 +0200
+++ b/hgext/histedit.py Fri Oct 12 21:41:08 2012 +0200
@@ -588,8 +588,12 @@
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]
--- a/tests/test-histedit-obsolete.t Thu Sep 27 14:00:52 2012 +0200
+++ b/tests/test-histedit-obsolete.t Fri Oct 12 21:41:08 2012 +0200
@@ -121,3 +121,22 @@
> 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]