amend: preserve phase of amended revision (issue3602) stable
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 30 Aug 2012 16:47:08 +0200
branchstable
changeset 17461 bacde764fba0
parent 17454 f5e86b416e05
child 17462 8085fed2bf0a
amend: preserve phase of amended revision (issue3602) New commit from the amend process were created without any phase contraint. If the amended changeset had a different phase from it's parent, the phases data were lost. The changeset ensure the new commit are created in the same phase than the original changeset.
mercurial/cmdutil.py
tests/test-commit-amend.t
--- a/mercurial/cmdutil.py	Fri Sep 07 00:42:42 2012 +0900
+++ b/mercurial/cmdutil.py	Thu Aug 30 16:47:08 2012 +0200
@@ -10,7 +10,7 @@
 import os, sys, errno, re, tempfile
 import util, scmutil, templater, patch, error, templatekw, revlog, copies
 import match as matchmod
-import subrepo, context, repair, bookmarks, graphmod, revset
+import subrepo, context, repair, bookmarks, graphmod, revset, phases
 
 def parsealiases(cmd):
     return cmd.lstrip("^").split("|")
@@ -1668,7 +1668,12 @@
                              user=user,
                              date=date,
                              extra=extra)
-        newid = repo.commitctx(new)
+        ph = repo.ui.config('phases', 'new-commit', phases.draft)
+        try:
+            repo.ui.setconfig('phases', 'new-commit', old.phase())
+            newid = repo.commitctx(new)
+        finally:
+            repo.ui.setconfig('phases', 'new-commit', ph)
         if newid != old.node():
             # Reroute the working copy parent to the new changeset
             repo.setparents(newid, nullid)
--- a/tests/test-commit-amend.t	Fri Sep 07 00:42:42 2012 +0900
+++ b/tests/test-commit-amend.t	Thu Aug 30 16:47:08 2012 +0200
@@ -355,3 +355,18 @@
   $ hg log -r . --debug | grep extra
   extra:       branch=a
   extra:       source=2647734878ef0236dda712fae9c1651cf694ea8a
+
+Preserve phase
+
+  $ hg phase '.^::.'
+  11: draft
+  13: draft
+  $ hg phase --secret --force .
+  $ hg phase '.^::.'
+  11: draft
+  13: secret
+  $ hg commit --amend -m 'amend for phase' -q
+  $ hg phase '.^::.'
+  11: draft
+  13: secret
+