##// END OF EJS Templates
tests: demonstrate bug in `hg fix` with incorrectly dirty working copy...
tests: demonstrate bug in `hg fix` with incorrectly dirty working copy If the parent commit needs formatting but the working copy already has the correct formatting, then the working copy will be reported as modified even though it's clean (because the size in the dirstate is incorrect). Because the bug only occurs when the size changes, I modified the formatter used in the test case to remove repeated spaces. Differential Revision: https://phab.mercurial-scm.org/D11208

File last commit:

r44897:4cabeea6 default
r48565:184d83ef stable
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
)