Получение внутрипроцессного хука Mercurial для запуска в Windows

Я пытаюсь заставить внутрипроцессный хук 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 дополнительные советы.
Тем не менее, спасибо за вашу помощь. , без тебя я, наверное, даже не зашел бы так далеко!


person Christian Specht    schedule 22.07.2010    source источник


Ответы (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. В сценарии есть адрес электронной почты — я предлагаю вам связаться с Кори Трейгером напрямую или через список рассылки BugTracker.NET. Поскольку это система отслеживания ошибок, я предполагаю, что у них есть подходящее место, где вы можете сообщить об этом! :-)

person Martin Geisler    schedule 22.07.2010