Как настроить ртутные крючки в Калифеи

Я занимаюсь этим уже некоторое время и не могу заставить его работать.

Согласно документации 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

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