Начало работы с 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. Так как это баг-трекер, я предполагаю, что у них есть подходящее место, где вы можете сообщить об этом!:-)

Другие вопросы по тегам