Как настроить ртутные крючки в Калифеи
Я занимаюсь этим уже некоторое время и не могу заставить его работать.
Согласно документации Kallithea:
To add another custom hook simply fill in the first textbox with <name>.<hook_type> and the second with the hook path. Example hooks can be found in kallithea.lib.hooks.
Поэтому моей первой попыткой было добавить новый метод в hooks.py. В основном, чтобы проверить ловушку, я хочу предотвратить ВСЕ толчок к репо. Поэтому я буду использовать pretxnchangegroup и возвращать не 0, не ложное значение, как указано в документации Mercurial.
A hook that executes successfully must exit with a status of zero if external, or return boolean “false” if in-process. Failure is indicated with a non-zero exit status from an external hook, or an in-process hook returning boolean “true”. If an in-process hook raises an exception, the hook is considered to have failed.
Итак, я сделал это:
def myhook(ui, repo, **kwargs):
return True
И я добавил хук к GUI в опциях хука Каллифеи:
pretxnchangegroup <=> python:kallithea.lib.hooks.myhook
Это, однако, не удалось, потому что по какой-то причине метод не может быть найден
abort: pretxnchangegroup hook is invalid ("kallithea.lib.hooks.myhook" is not defined)
Поэтому я попытался поместить его в другой файл (в ту же папку "lib", где находится hooks.py). Создал файл с именем canpush.py и добавил туда тот же метод. Я изменил путь подключения к новому имени файла:
pretxnchangegroup <=> python:kallithea.lib.hooks.myhook
Однако ловушка не срабатывает, и я могу без проблем протолкнуть свой репо. Я планирую изменить фактическую реализацию ловушек в будущем, push будет разрешено, но сначала мне нужно получить любой функционал ловушек с Kallithea.
Что я здесь не так делаю?
Кроме того, если кто-то знает, как использовать настройки hgrc из отдельного репозитория в Kallithea, пример будет отличным. Оригинальный вопрос здесь.
1 ответ
Отвечая на мой собственный вопрос, но просто чтобы сохранить его в качестве справки.
Как оказалось, с настройкой все было в порядке, но в отчаянии я решил перезапустить демон kallithea (чего не было в документации), в основном подумав "что может пойти не так" - и это помогло!
Я предполагаю, что в процессе запуска все компилируется / кэшируется, и методы определения ловушек находят и работают (если у кого-то есть лучшее объяснение того, что происходит при перезапуске каллифеи, поделитесь им)
Таким образом, после каждого изменения файлов хуков демон kallithea должен быть перезапущен, чтобы хуки имели какой-либо эффект.
sudo service kallithea restart
Что-то еще, что мне было непонятно из чтения документации по kallithea, - это то, что хуки - это ртутные хуки, на самом деле они не являются каким-то API-интерфейсом kallithea / rhodecode, а ртутными.
Это означает, что лучшим источником документации о том, как написать, является что-то вроде http://hgbook.red-bean.com/read/handling-repository-events-with-hooks.html