D1682: unamend: allow unamending if allowunstable is set

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Thu Dec 14 01:28:02 UTC 2017


martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  I don't see why unamend should be disallowed when allowunstable is
  set. By switching to rewriteutil.precheck() we fix that and get more
  consistent error messages (and some additional ones).

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1682

AFFECTED FILES
  hgext/uncommit.py
  tests/test-unamend.t

CHANGE DETAILS

diff --git a/tests/test-unamend.t b/tests/test-unamend.t
--- a/tests/test-unamend.t
+++ b/tests/test-unamend.t
@@ -280,17 +280,20 @@
   o  0:18d04c59bb5d  Added a
   
 
+  $ hg --config experimental.evolution=createmarkers unamend
+  abort: cannot unamend changeset with children
+  [255]
+
   $ hg unamend
-  abort: cannot unamend a changeset with children
-  [255]
 
 Trying to unamend a public changeset
 
-  $ hg up
-  4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg up -C 23
+  5 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg phase -r . -p
   $ hg unamend
   abort: cannot unamend public changesets
+  (see 'hg help phases' for details)
   [255]
 
 Testing whether unamend retains copies or not
diff --git a/hgext/uncommit.py b/hgext/uncommit.py
--- a/hgext/uncommit.py
+++ b/hgext/uncommit.py
@@ -208,8 +208,7 @@
         # identify the commit from which to unamend
         curctx = repo['.']
 
-        if not curctx.mutable():
-            raise error.Abort(_('cannot unamend public changesets'))
+        rewriteutil.precheck(repo, [curctx.rev()], 'unamend')
 
         # identify the commit to which to unamend
         markers = list(predecessormarkers(curctx))
@@ -220,9 +219,6 @@
         prednode = markers[0].prednode()
         predctx = unfi[prednode]
 
-        if curctx.children():
-            raise error.Abort(_("cannot unamend a changeset with children"))
-
         # add an extra so that we get a new hash
         # note: allowing unamend to undo an unamend is an intentional feature
         extras = predctx.extra()



To: martinvonz, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list