##// END OF EJS Templates
dynamic-import: use sysstr for importing extension and others...
dynamic-import: use sysstr for importing extension and others This logic is used by extensions, and python hooks and merge-tools. All this logic eventually deals with native string (unicode in Python 3). This patch makes it handle `str` directly instead of relying on some pycompat low lever layer to do the conversion at the last minutes. We adjust the Python version filtering of a test as the output seems to be present with Python 3.7 too.

File last commit:

r49730:6000f5b2 default
r51816:c642c039 default
Show More
reject_new_heads.py
40 lines | 1.2 KiB | text/x-python | PythonLexer
# Copyright 2020 Joerg Sonnenberger <joerg@bec.de>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""reject_new_heads is a hook to check that branches touched by new changesets
have at most one open head. It can be used to enforce policies for
merge-before-push or rebase-before-push. It does not handle pre-existing
hydras.
Usage:
[hooks]
pretxnclose.reject_new_heads = \
python:hgext.hooklib.reject_new_heads.hook
"""
from mercurial.i18n import _
from mercurial import (
error,
pycompat,
)
def hook(ui, repo, hooktype, node=None, **kwargs):
if hooktype != b"pretxnclose":
raise error.Abort(
_(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
)
ctx = repo.unfiltered()[node]
branches = set()
for rev in repo.changelog.revs(start=ctx.rev()):
rev = repo[rev]
branches.add(rev.branch())
for branch in branches:
if len(repo.revs("head() and not closed() and branch(%s)", branch)) > 1:
raise error.Abort(
_(b'Changes on branch %r resulted in multiple heads')
% pycompat.bytestr(branch)
)