Я пытаюсь заставить внутрипроцессный хук Mercurial работать в Windows.
Проблема не в том, как написать хук (я хочу использовать существующий, в данном случае BugTracker.Net для интеграции Mercurial — я не нашел прямой ссылки на файл, но вы можете увидеть его, если вы загружаете BT.net здесь, он находится в подпапке "mercurial").
Проблема в том, как заставить Mercurial запустить его.
Я потратил довольно много времени, чтобы прочитать документацию, но сейчас я застрял.
(вероятно, было бы проще, если бы у меня были определенные знания Python, которых у меня нет)
Я знаю, что мне нужно вставить строку в файл hgrc (в папку .hg моего репозитория).
Пример в HG Book который выглядит так:
[hooks]
commit.example = python:mymodule.submodule.myhook
И еще один пример на сайте Mercurial, он выглядит так:
[hooks]
changegroup = /path/to/changegrouphook
Теперь мне нужен «входящий» хук, поэтому, по крайней мере, я знаю, что должен сделать это:
[hooks]
incoming.btnet = X
Проблема состоит в том, чтобы определить "X".
Имя файла - hg_hook_for_btnet.py, и в файле есть строка, которая выглядит следующим образом:
def debug_out(s):
Я предполагаю, что это имя самой «функции».
Итак, моя строка должна выглядеть примерно так:
[hooks]
incoming.btnet = python:hg_hook_for_btnet.debug_out
Но это дает мне сообщение об ошибке [Errno 2] Нет такого файла или каталога, когда я нажимаю.
Я уже пробовал много разных вариантов, но это не работает, и я не знаю что я делаю неправильно.
- Нужен ли мне python: в начале или нет?
- Нужно ли указывать расширение файла .py или нет?
- Нужен ли мне /path/to/..., как указано в примере с сайта Mercurial (см. выше)?
- Если да, каков правильный синтаксис пути? (просто c:\MyRepo\ не работает — в Python должен быть другой синтаксис)
Кроме того, я поместил файл ловушки в правильную папку?
Сейчас он находится в главной папке моего репозитория (на том же уровне, что и папка .hg).
ИЗМЕНИТЬ:
Мартин, я изменил это на это:
[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out
Теперь я получаю другое сообщение: [Errno 22] Недопустимый аргумент
Я полагаю, это из-за упомянутых вами аргументов repo
и ui
.
Значит ли это, что скрипт-ловушка не работает?
(как я уже сказал, я ничего не знаю о Python, это существующий скрипт-ловушка из система отслеживания ошибок с открытым исходным кодом)
РЕДАКТИРОВАТЬ 2:
Извините за путаницу с внутрипроцессным и отдельным процессом - я знаю, что есть разница, но я предположил, что если хук написан на Python, он должен быть внутрипроцессным автоматически (оказывается, я ошибался :-)
Хорошо, с синтаксисом в вашем отредактированном ответе скрипт по крайней мере запускается.
У меня установлен Python 2.7 (уже сделал это до того, как я задал вопрос здесь) и изменил первую строку в скрипте на #!C:\Python27\python.exe
.
Теперь Я получаю это:
running hook incoming.btnet: c:\HG\MyRepo\hg_hook_for_btnet.py
warning: incoming.btnet hook exited with status 1
Таким образом, скрипт запускается, но все еще есть какая-то ошибка.
Похоже, это проблема, связанная с Bugtracker.NET, поэтому я спрошу в списке рассылки BT.NET дополнительные советы.
Тем не менее, спасибо за вашу помощь. , без тебя я, наверное, даже не зашел бы так далеко!