# HG changeset patch # User Martin von Zweigbergk # Date 2018-06-19 20:49:06 # Node ID 4f885770c4a2ee95d7627a8ab8933167e8ca3e23 # Parent 32fba6fe893d2303e107b534e9c121207e64577f split: preserve phase of commit that is being split With this change, hg split will preserve the phase of the commit that is being split, ignoring the phases.new-commit setting. Previously, we would use whatever phases.new-commit was set to (unless our parent was secret, then we would be secret even if phases.new-commit=draft). Now, splitting a draft commit with phases.new-commit=secret does not cause the new commits to become secret, and splitting a secret commit with phases.new-commit=draft and a draft parent does not cause the new commits to become draft. Test cases and commit message taken from Kyle Lippincott's D2016 (thanks!). Differential Revision: https://phab.mercurial-scm.org/D3819 diff --git a/hgext/split.py b/hgext/split.py --- a/hgext/split.py +++ b/hgext/split.py @@ -170,7 +170,7 @@ def dosplit(ui, repo, tr, ctx, opts): raise error.Abort(_('cannot split an empty revision')) scmutil.cleanupnodes(repo, {ctx.node(): [c.node() for c in committed]}, - operation='split') + operation='split', fixphase=True) return committed[-1] diff --git a/tests/test-split.t b/tests/test-split.t --- a/tests/test-split.t +++ b/tests/test-split.t @@ -532,3 +532,36 @@ Split a non-head with obsoleted descenda o 0:426bada5c675 A #endif + +Preserve secret phase in split + + $ cp -R $TESTTMP/clean $TESTTMP/phases1 + $ cd $TESTTMP/phases1 + $ hg phase --secret -fr tip + $ hg log -T '{short(node)} {phase}\n' + 1df0d5c5a3ab secret + a61bcde8c529 draft + $ runsplit tip >/dev/null + $ hg log -T '{short(node)} {phase}\n' + 00eebaf8d2e2 secret + a09ad58faae3 secret + e704349bd21b secret + a61bcde8c529 draft + +Do not move things to secret even if phases.new-commit=secret + + $ cp -R $TESTTMP/clean $TESTTMP/phases2 + $ cd $TESTTMP/phases2 + $ cat >> .hg/hgrc < [phases] + > new-commit=secret + > EOF + $ hg log -T '{short(node)} {phase}\n' + 1df0d5c5a3ab draft + a61bcde8c529 draft + $ runsplit tip >/dev/null + $ hg log -T '{short(node)} {phase}\n' + 00eebaf8d2e2 draft + a09ad58faae3 draft + e704349bd21b draft + a61bcde8c529 draft