Patchwork D2014: amend: --no-secret overrides phases.new-commit and previous phase

login
register
mail settings
Submitter phabricator
Date Feb. 2, 2018, 11:40 p.m.
Message ID <differential-rev-PHID-DREV-elm3cwpo54jslgerfymv-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/27247/
State Superseded
Headers show

Comments

phabricator - Feb. 2, 2018, 11:40 p.m.
spectral created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Previously, commit --amend would keep the phase of the commit that's being
  amended, and commit --amend --secret would force it to secret. There was no
  mechanism to forcibly change a secret commit to draft in one step.
  
  This change is being made mostly for parity with what users likely expect based
  on the new behavior of `commit --no-secret` overriding phases.new-commit=secret;
  it was confusing when writing the tests that `commit --amend --no-secret` didn't
  operate the same.
  
  Like with `commit --no-secret`, if the parent is secret, this will silently
  ignore the --no-secret option and the new commit will be secret.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/cmdutil.py
  tests/test-commit-amend.t

CHANGE DETAILS




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

Patch

diff --git a/tests/test-commit-amend.t b/tests/test-commit-amend.t
--- a/tests/test-commit-amend.t
+++ b/tests/test-commit-amend.t
@@ -879,11 +879,24 @@ 
   29: draft
   31: secret
 
+Test that amend with --no-secret creates new draft changeset forcibly
+(ignoring both the existing phase and phases.new-commit=secret)
+---------------------------------------------------------------------
+
+  $ hg phase '.^::.'
+  29: draft
+  31: secret
+  $ hg --config phases.new-commit=secret \
+  >     commit --amend --no-secret -m 'amend as no-secret' -q
+  $ hg phase '.^::.'
+  29: draft
+  32: draft
+
 Test that amend with --edit invokes editor forcibly
 ---------------------------------------------------
 
   $ hg parents --template "{desc}\n"
-  amend as secret
+  amend as no-secret
   $ HGEDITOR=cat hg commit --amend -m "editor should be suppressed"
   $ hg parents --template "{desc}\n"
   editor should be suppressed
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3302,8 +3302,8 @@ 
             # This not what we expect from amend.
             return old.node()
 
-        if opts.get('secret'):
-            commitphase = 'secret'
+        if opts.get('secret') is not None:
+            commitphase = 'secret' if opts.get('secret') else 'draft'
         else:
             commitphase = old.phase()
         overrides = {('phases', 'new-commit'): commitphase}