Вот обработчик, который должен отклонять дополнительные наборы изменений в закрытой ветви.
from mercurial import context, ui
def run(ui, repo, node, **kwargs):
ctx = repo[node]
for rev in xrange(ctx.rev(), len(repo)):
ctx = context.changectx(repo, rev)
parent1 = ctx.parents()[0]
if parent1 != None and parent1.extra().get('close'):
ui.warn("Commit to closed branch is forbidden!\n")
return True
return False
Хук может работать в режиме pretxncommit (проверяется во время транзакции локальной фиксации) или режиме pretxnchangegroup (проверяется при добавлении наборов изменений из внешнего репо) со следующими записями hgrc:
[hooks]
pretxncommit.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run
pretxnchangegroup.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run
Не уверен, что этот хук будет работать с версиями Mercurial до 2.2.