diff --git a/mercurial/rewriteutil.py b/mercurial/rewriteutil.py --- a/mercurial/rewriteutil.py +++ b/mercurial/rewriteutil.py @@ -7,11 +7,39 @@ from __future__ import absolute_import +from .i18n import _ + from . import ( + error, + node, obsolete, revset, ) +def precheck(repo, revs, action='rewrite'): + """check if revs can be rewritten + action is used to control the error message. + + Make sure this function is called after taking the lock. + """ + if node.nullrev in revs: + msg = _("cannot %s null changeset") % (action) + hint = _("no changeset checked out") + raise error.Abort(msg, hint=hint) + + publicrevs = repo.revs('%ld and public()', revs) + if len(repo[None].parents()) > 1: + raise error.Abort(_("cannot %s while merging") % action) + + if publicrevs: + msg = _("cannot %s public changesets") % (action) + hint = _("see 'hg help phases' for details") + raise error.Abort(msg, hint=hint) + + newunstable = disallowednewunstable(repo, revs) + if newunstable: + raise error.Abort(_("cannot %s changeset with children") % action) + def disallowednewunstable(repo, revs): """Checks whether editing the revs will create new unstable changesets and are we allowed to create them.