Я заставил его работать, сделав его внутрипроцессным хуком , а не внешним хуком. Внутрипроцессные крючки определены совсем по-другому, однако.
Во-первых, файлу python требуется только одна функция, которая будет вызываться по имени в определении ловушки. Функция ловушки передается объектам ui
, repo
и hooktype
. Также передаются дополнительные объекты в зависимости от типа крючка. Для pretrxncommit
он передается node
, parent1
и parent2
, но вас интересует только узел, поэтому остальные собираются в kwargs
. Объект ui
используется для выдачи сообщений о состоянии и ошибках.
Содержимое check_comment.py
:
#!/usr/bin/env python
import re
def check_comment(ui, repo, hooktype, node=None, **kwargs):
ui.status('Checking comment...\n')
comment = repo[node].description()
pattern = '^((Issue \d+:)|(No Issue:)).+'
if not re.match(pattern, comment, flags=re.IGNORECASE):
ui.warn('Comment does not match pattern. You must start it with "Issue 12323:" or "No Issue:"\n')
return True
В hgrc
хук будет определяться с python:/path/to/file.py:function_name
, например:
[hooks]
pretxncommit.check_comment = python:/path/to/check_comment.py:check_comment
.suffix_name
на pretxncommit
состоит в том, чтобы избежать переопределения любого глобально определенного хука, особенно если он определен в hgrc
хранилища, а не в глобальном. Суффиксы - это то, как можно разрешить несколько ответов на один и тот же хук.