From patchwork Thu Nov 23 22:39:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D1503: rewriteutil: add a precheck function to check if revs can be rewritten From: phabricator X-Patchwork-Id: 25734 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Thu, 23 Nov 2017 22:39:29 +0000 pulkit created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY The precheck function is intended to be used before we start rewritting changesets. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D1503 AFFECTED FILES mercurial/rewriteutil.py CHANGE DETAILS To: pulkit, #hg-reviewers Cc: mercurial-devel diff --git a/mercurial/rewriteutil.py b/mercurial/rewriteutil.py --- a/mercurial/rewriteutil.py +++ b/mercurial/rewriteutil.py @@ -6,12 +6,38 @@ # GNU General Public License version 2 or any later version. from mercurial import ( + node, obsolete, revset, ) from mercurial.i18n import _ +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: + summary = _formatrevs(repo, 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")) + def disallowednewunstable(repo, revs): """Checks whether editing the revs will create new unstable changesets and are we allowed to create them.