Начало работы с Mercurial в Windows - PullRequest
4 голосов
/ 22 июля 2010

Я пытаюсь заставить обработчик 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] Нет такого файла иликаталог когда я нажимаю.
Я уже перепробовал много разных вариантов, но он не работает, и я не знаю, что я делаю неправильно.

  • Нужно ли мне 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 дополнительные советы.
Спасибо за вашу помощьхотя без тебя я бы даже не зашел бы так далеко!

1 Ответ

5 голосов
/ 22 июля 2010

Вы должны использовать

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

...