Mercurial > hg-stable
diff hgext/uncommit.py @ 48817:9120c0cd935c stable
unamend: abort if commit was not created by `hg [un]amend`
`hg unamend` can currently undo any kind of rewrite, as long as it has
an obsmarker. However, that has quite unexpected results if you run it
after e.g. `hg rebase` (expecting it to behave like a generic `hg
undo` command), because it updates to the predecessor and leaves the
old changes in the working copy. I think it's better to allow `hg
unamend` only after `hg amend` (and after `hg unamend` because that's
documented as being supported).
Differential Revision: https://phab.mercurial-scm.org/D12390
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 21 Mar 2022 14:21:10 -0700 |
parents | 4f01821fa0ec |
children | 533820f5b997 |
line wrap: on
line diff
--- a/hgext/uncommit.py Thu Mar 17 14:58:46 2022 +0100 +++ b/hgext/uncommit.py Mon Mar 21 14:21:10 2022 -0700 @@ -276,6 +276,15 @@ if len(curctx.parents()) > 1: raise error.InputError(_(b"cannot unamend merge changeset")) + expected_keys = (b'amend_source', b'unamend_source') + if not any(key in curctx.extra() for key in expected_keys): + raise error.InputError( + _( + b"working copy parent was not created by 'hg amend' or " + b"'hg unamend'" + ) + ) + # identify the commit to which to unamend markers = list(predecessormarkers(curctx)) if len(markers) != 1: