Я не смог найти способ с помощью ловушки, но я смог сделать это, используя extensions.wrapcommand
и изменив параметры.
Я включил источник полученного расширения здесь.
При обнаружении отсутствия сообщения в сообщении о фиксации моя версия предлагает пользователю ввести его, игнорировать предупреждение или отменить принятие.
Если пользователь отвечает на приглашениеуказав номер дела, он добавляется к существующему сообщению о фиксации.
Если пользователь отвечает «x», фиксация отменяется, а изменения остаются невыполненными.
Если ответ пользователяпросто нажав Enter, коммит продолжает исходное сообщение фиксации без учета регистра.
Я также добавил опцию nofb, которая пропускает запрос, если пользователь целенаправленно делает коммит без номера регистра.
Вот расширение:
"""fogbugzreminder
Reminds the user to include a FogBugz case reference in their commit message if none is specified
"""
from mercurial import commands, extensions
import re
RE_CASE = re.compile(r'(case):?\s*\d+', re.IGNORECASE)
RE_CASENUM = re.compile(r'\d+', re.IGNORECASE)
def commit(originalcommit, ui, repo, **opts):
haschange = False
for changetype in repo.status():
if len(changetype) > 0:
haschange = True
if not haschange and ui.config('ui', 'commitsubrepos', default=True):
ctx = repo['.']
for subpath in sorted(ctx.substate):
subrepo = ctx.sub(subpath)
if subrepo.dirty(): haschange = True
if haschange and not opts["nofb"] and not RE_CASE.search(opts["message"]):
casenumResponse = ui.prompt('*** Please specify a case number, x to abort, or hit enter to ignore:', '')
casenum = RE_CASENUM.search(casenumResponse)
if casenum:
opts["message"] += ' (Case ' + casenum.group(0) + ')'
print '*** Continuing with updated commit message: ' + opts["message"]
elif (casenumResponse == 'x'):
ui.warn('*** User aborted\n')
return False
return originalcommit(ui, repo, **opts)
def uisetup(ui):
entry = extensions.wrapcommand(commands.table, "commit", commit)
entry[1].append(('', 'nofb', None, ('suppress the fogbugzreminder warning if no case number is present in the commit message')))
Чтобы использовать это расширение, скопируйте источник в файл с именем fogbugzreminder.py
.Затем в файле Mercurial.ini (или hgrc, независимо от ваших предпочтений) добавьте следующую строку в раздел [extensions]
:
fogbugzreminder=[path to the fogbugzreminder.py file]