rewriteutil.py
55 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
/ mercurial / rewriteutil.py
|
r35242 | # rewriteutil.py - utility functions for rewriting changesets | ||
# | ||||
# Copyright 2017 Octobus <contact@octobus.net> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
from __future__ import absolute_import | ||||
|
r35243 | from .i18n import _ | ||
|
r35242 | from . import ( | ||
|
r35243 | error, | ||
node, | ||||
|
r35242 | obsolete, | ||
revset, | ||||
) | ||||
|
r43345 | |||
|
r35243 | 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: | ||||
|
r43345 | msg = _("cannot %s null changeset") % action | ||
|
r35243 | hint = _("no changeset checked out") | ||
raise error.Abort(msg, hint=hint) | ||||
if len(repo[None].parents()) > 1: | ||||
raise error.Abort(_("cannot %s while merging") % action) | ||||
r40672 | publicrevs = repo.revs('%ld and public()', revs) | |||
|
r35243 | if publicrevs: | ||
|
r43345 | msg = _("cannot %s public changesets") % action | ||
|
r35243 | 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) | ||||
|
r43345 | |||
|
r35242 | def disallowednewunstable(repo, revs): | ||
"""Checks whether editing the revs will create new unstable changesets and | ||||
are we allowed to create them. | ||||
To allow new unstable changesets, set the config: | ||||
`experimental.evolution.allowunstable=True` | ||||
""" | ||||
allowunstable = obsolete.isenabled(repo, obsolete.allowunstableopt) | ||||
if allowunstable: | ||||
return revset.baseset() | ||||
return repo.revs("(%ld::) - %ld", revs, revs) | ||||