##// END OF EJS Templates
sidedata: move to new sidedata storage in revlogv2...
sidedata: move to new sidedata storage in revlogv2 The current (experimental) sidedata system uses flagprocessors to signify the presence and store/retrieve sidedata from the raw revlog data. This proved to be quite fragile from an exchange perspective and a lot more complex than simply having a dedicated space in the new revlog format. This change does not handle exchange (ironically), so the test for amend - that uses a bundle - is broken. This functionality is split into the next patches. Differential Revision: https://phab.mercurial-scm.org/D9993

File last commit:

r44897:4cabeea6 default
r47443:3d740058 default
Show More
reject_new_heads.py
41 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 __future__ import absolute_import
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)
)