Начало работы с Mercurial в Windows
Я пытаюсь заставить подключиться Mercurial в Windows.
Проблема не в том, как написать хук (я хочу использовать существующий, в данном случае хук BugTracker.Net для интеграции Mercurial - я не нашел прямой ссылки на файл, но вы можете увидеть его, если вы скачайте BT.net здесь, он находится в подпапке "mercurial").
Проблема в том, как сказать Mercurial запустить его.
Я потратил довольно много времени, чтобы прочитать документацию, но я застрял прямо сейчас.
(вероятно, было бы легче с определенным знанием Python - которого у меня нет)
Я знаю, что мне нужно вставить строку в файл hgrc (в папке.hg моего хранилища).
В книге HG есть пример, который выглядит так:
[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] Нет такого файла или каталога, когда я нажимаю.
Я уже пробовал много разных вариантов, но это не работает, и я не знаю, что я делаю неправильно.
- Нужен ли мне питон: в начале или нет?
- Нужно ли указывать расширение файла .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 дополнительные советы.
Спасибо за вашу помощь, но без вас я бы даже не зашел так далеко!
1 ответ
Вы должны использовать
[hooks]
incoming.btnet = python:~/path/to/hg_hook_for_btnet.py:debug_out
и определить debug_out
как
def debug_out(ui, repo, **kwargs):
# ...
как объясняется в книге HG - все хуки вызываются с ui
и repo
аргумент плюс некоторые дополнительные специфичные для хука аргументы. Страница Mercurial API объясняет, что вы можете сделать с ui
и repo
аргументы.
Редактировать: Ага... Я сейчас посмотрел на сценарий. Он не предназначен для использования в качестве подключаемого Mercurial. Вместо этого он предназначен для запуска в качестве отдельного процесса. Так что вам нужно будет использовать
[hooks]
incoming.btnet = c:\HG\MyRepo\hg_hook_for_btnet.py
и убедитесь, что вы следуете инструкциям в скрипте: он говорит об установке пути к hg.exe
двоичный и вашему интерпретатору Python. Последнее означает, что автор ожидает от вас установки Python. В сценарии есть адрес электронной почты - я предлагаю вам связаться с Corey Trager напрямую или через список рассылки BugTracker.NET. Так как это баг-трекер, я предполагаю, что у них есть подходящее место, где вы можете сообщить об этом!:-)