# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 2017-11-28 00:20:45 # Node ID 98f97eb2059767ce1d659cd9c929ca69b21b7450 # Parent 490df753894d65f76cc638ad918712a6b24aeeb0 rewriteutil: use precheck() in uncommit and amend commands Differential Revision: https://phab.mercurial-scm.org/D1526 diff --git a/hgext/uncommit.py b/hgext/uncommit.py --- a/hgext/uncommit.py +++ b/hgext/uncommit.py @@ -28,10 +28,10 @@ from mercurial import ( copies, error, node, - obsolete, obsutil, pycompat, registrar, + rewriteutil, scmutil, ) @@ -155,23 +155,14 @@ def uncommit(ui, repo, *pats, **opts): opts = pycompat.byteskwargs(opts) with repo.wlock(), repo.lock(): - wctx = repo[None] if not pats and not repo.ui.configbool('experimental', 'uncommitondirtywdir'): cmdutil.bailifchanged(repo) - if wctx.parents()[0].node() == node.nullid: - raise error.Abort(_("cannot uncommit null changeset")) - if len(wctx.parents()) > 1: - raise error.Abort(_("cannot uncommit while merging")) old = repo['.'] - if not old.mutable(): - raise error.Abort(_('cannot uncommit public changesets')) + rewriteutil.precheck(repo, [old.rev()], 'uncommit') if len(old.parents()) > 1: raise error.Abort(_("cannot uncommit merge changeset")) - allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) - if not allowunstable and old.children(): - raise error.Abort(_('cannot uncommit changeset with children')) with repo.transaction('uncommit'): match = scmutil.match(old, pats, opts) diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -49,6 +49,7 @@ from . import ( rcutil, registrar, revsetlang, + rewriteutil, scmutil, server, sshserver, @@ -1541,13 +1542,7 @@ def _docommit(ui, repo, *pats, **opts): raise error.Abort(_('cannot amend with ui.commitsubrepos enabled')) old = repo['.'] - if not old.mutable(): - raise error.Abort(_('cannot amend public changesets')) - if len(repo[None].parents()) > 1: - raise error.Abort(_('cannot amend while merging')) - allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) - if not allowunstable and old.children(): - raise error.Abort(_('cannot amend changeset with children')) + rewriteutil.precheck(repo, [old.rev()], 'amend') # Currently histedit gets confused if an amend happens while histedit # is in progress. Since we have a checkunfinished command, we are diff --git a/tests/test-amend.t b/tests/test-amend.t --- a/tests/test-amend.t +++ b/tests/test-amend.t @@ -213,6 +213,7 @@ Cannot amend public changeset $ hg update -C -q A $ hg amend -m AMEND abort: cannot amend public changesets + (see 'hg help phases' for details) [255] Amend a merge changeset 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 @@ -16,6 +16,7 @@ Refuse to amend public csets: $ hg phase -r . -p $ hg ci --amend abort: cannot amend public changesets + (see 'hg help phases' for details) [255] $ hg phase -r . -f -d diff --git a/tests/test-uncommit.t b/tests/test-uncommit.t --- a/tests/test-uncommit.t +++ b/tests/test-uncommit.t @@ -41,6 +41,7 @@ Uncommit with no commits should fail $ hg uncommit abort: cannot uncommit null changeset + (no changeset checked out) [255] Create some commits