# HG changeset patch # User Pierre-Yves David # Date 1356997458 21600 # Node ID c5bd753c5bc6c25ff4e0bfbe95c82095a476977d # Parent df1b37c8ae679693a0829e231d359f1dc20bb78e amend: allow amend of non-head when obsolete is enabled Obsolescence marker can represent this situation just fine. The old version is marked as precursor of the new changeset. All its descendants become "unstable". If obsolescence is not enabled we keep the current behavior of aborting. This new behavior only applies when obsolete is enabled and is subject to future discussion and changes. diff -r df1b37c8ae67 -r c5bd753c5bc6 mercurial/commands.py --- a/mercurial/commands.py Fri Dec 21 22:58:59 2012 +0100 +++ b/mercurial/commands.py Mon Dec 31 17:44:18 2012 -0600 @@ -1296,7 +1296,7 @@ raise util.Abort(_('cannot amend merge changesets')) if len(repo[None].parents()) > 1: raise util.Abort(_('cannot amend while merging')) - if old.children(): + if (not obsolete._enabled) and old.children(): raise util.Abort(_('cannot amend changeset with children')) e = cmdutil.commiteditor diff -r df1b37c8ae67 -r c5bd753c5bc6 tests/test-commit-amend.t --- a/tests/test-commit-amend.t Fri Dec 21 22:58:59 2012 +0100 +++ b/tests/test-commit-amend.t Mon Dec 31 17:44:18 2012 -0600 @@ -458,3 +458,23 @@ $ hg commit --amend $ hg id b99e5df575f7 (a) tip + +Test ui.prevent-unstable +--------------------------------------------------------------------- + + $ hg up '.^' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo 'b' >> a + $ hg log --style compact -r 'children(.)' + 18[tip]:11 b99e5df575f7 1970-01-01 00:00 +0000 test + babar + + $ hg commit --amend + $ hg log -r 'unstable()' + changeset: 18:b99e5df575f7 + branch: a + parent: 11:3334b7925910 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: babar +