##// END OF EJS Templates
dirstate: stop gathering parentfiledata in update_file_p1...
dirstate: stop gathering parentfiledata in update_file_p1 Gathering information here assume that they are valid cache information for a clean file. It is true most of the time, but not garanteed. So we drop this and will let the next `hg status` call record actual information. Differential Revision: https://phab.mercurial-scm.org/D11790

File last commit:

r44897:4cabeea6 default
r49209:6becd577 default
Show More
reject_merge_commits.py
45 lines | 1.3 KiB | text/x-python | PythonLexer
/ hgext / hooklib / reject_merge_commits.py
# 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_merge_commits is a hook to check new changesets for merge commits.
Merge commits are allowed only between different branches, i.e. merging
a feature branch into the main development branch. This can be used to
enforce policies for linear commit histories.
Usage:
[hooks]
pretxnchangegroup.reject_merge_commits = \
python:hgext.hooklib.reject_merge_commits.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"pretxnchangegroup":
raise error.Abort(
_(b'Unsupported hook type %r') % pycompat.bytestr(hooktype)
)
ctx = repo.unfiltered()[node]
for rev in repo.changelog.revs(start=ctx.rev()):
rev = repo[rev]
parents = rev.parents()
if len(parents) < 2:
continue
if all(repo[p].branch() == rev.branch() for p in parents):
raise error.Abort(
_(
b'%s rejected as merge on the same branch. '
b'Please consider rebase.'
)
% rev
)