histedit: refuse to edit public changeset
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Fri, 12 Oct 2012 21:41:08 +0200
changeset 17762 57f27cbfc5bb
parent 17761 c80a7a0c7d22
child 17763 13070de77c86
histedit: refuse to edit public changeset Public changeset are immutable. This changeset enforce that in histedit.
hgext/histedit.py
tests/test-histedit-obsolete.t
--- 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]