Пара mercurial hooks для python-программиста
Хуки — действия при определенных событиях в репозитории. Это чертовски удобная вещь в системах контроля версий. С их помощью можно делать проверки сохраняемых файлов, запускать unit-тесты для проекта, уведомлять других разработчиков о новых changeset’ах и т.д.
Ниже я приведу два хука к mercurial, которые немного облегчают жизнь python разработчику.
Задачи:
- Не дать сделать commit файлов, содержащих в себе print.
- После обновления репозитория удалить .pyc и .pyo файлы
Проверка существования print в тексте.
Зачем? Например, если запущенному приложению нельзя писать в stdout. К примеру, mod_wsgi для apache запрещает так делать и вызывает IOError.
Код: http://code.svartalf.info/misc/src/tip/mercurial_hooks.py#cl-12
Удаление .pyc файлов
Известно, что интерпретатор python делает byte-compiled версии файлов с расширением .pyc. После переключения в другой branch или получения новых changeset’ов код может по-прежнему читаться из «кешированных» файлов, что конечно не хорошо. Подключаем хук на событие incoming:
Код: http://code.svartalf.info/misc/src/tip/mercurial_hooks.py#cl-55
Как теперь подключить эти хуки к репозиторию? Сохраняем их в файл .hg/hooks.py (Или в любое место из PYTHONPATH) и редактируем файл .hg/hgrc
[hooks]
precommit = python:.hg/hooks.py:print_check
incoming = python:.hg/hooks.py:clean_cache
Как видно, автоматизация мелкой рутинной работы при работе с mercurial весьма проста. Нужны еще примеры? Их есть в файле commands.py из исходников самого mercurial.