HG Mercurial email уведомления
В каждом серьезном проекте используется контроль версий и разработку зачастую ведет не один программист. Как минимум, кроме программиста есть еще и главный программист, который следит за качеством разработки.
С помощью hg mercural мы можем предоставить главному программисту мониторинг изменений в репозитории, особенно когда это касается обновления главной ветки.
В mercurial для этого есть замечательный встроенный плагин notify, который поможет нам настроить уведомления по email.
Схема репозиториев будет следующая:
- Главный /www/mybigsite.com/
- Транзитный /home/repos/mybigsite
- Репозиторий разработчика находится в его домашнем каталоге.
Когда разработчику надо отправить новую порцию изменений в главный репозиторий, он:
- Отправляет данные в транзитный репозиторий (команда hg pus)
- А потом главный разработчик проверяет изменения и обновляет главный репозиторий (команда hg pus && hg up)
Настроим два уведомления:
- По событию hg pus в транзитный репозиторий - будем отправлять diff изменений главному программисту. Таких обновлений (hg pus) разработчик или разработчики могут сделать несколько, до того как будет обновлен главный репозиторий.
- Главный программист получив уведомления об обновлении транзитного репозитория проверяет изменения и обновляет главный репозиторий. По этому событию мы отправляем главному разработчику новую порцию diff изменений, который содержит именно все порции обновлений, что попали на главный репозиторий.
Теперь перейдем к настройке уведомлений используя hghook notify.
Открываем файл команд hgrc транзитного репозитория, если файла нет, то создаем его /home/repos/mybigsite/.hg/hgrc и добавляем следующие строки
-
[extensions]
-
-
hgext.notify =
-
-
-
-
[hooks]
-
-
# уведомлеять о группе изменений в одном email
-
changegroup.notify = python:hgext.notify.hook
-
-
# уведомлеять о каждом отдельном изменении в отдельном email
-
#incoming.notify = python:hgext.notify.hook
-
-
-
-
[email]
-
-
#поле From in Email
-
from = notifications@mybigsite.com
-
-
#поле Subject и другие заголовки письма прописываются в шаблоне письма, смотрите поле template ниже
-
-
-
[usersubs]
-
-
# key is subscriber email, value is comma-separated list of glob patterns
-
-
developer@mybigsite.com = *
-
-
admin@mybigsite .com = *
-
-
-
-
[reposubs]
-
-
# key is glob pattern, value is comma-separated list of subscriber emails
-
-
developer@mybigsite.com = *
-
-
admin@mybigsite .com
-
-
-
[smtp]
-
-
host = localhost
-
-
# Optional options:
-
-
# username = joeuser
-
-
# password = secret
-
-
# port = 25
-
-
# tls = true
-
-
# local_hostname = me.example.com
-
-
-
-
# presently it is necessary to specify the baseurl for the notify
-
-
# extension to work. It can be a dummy value if your repo isn't
-
# available via http
-
[web]
-
baseurl = https://intranet.mybigsite.com/hgserver/...
-
[notify]
-
# пишем через пробел события которые мы перехватываем, нам надо ловить push в транзитмно репозитории
-
sources = push
-
# set this to False when you're ready for mail to start sending
-
-
test = False
-
-
# В config можно указать путь к файлу с подписчиками, он содержит группы [userssubs] и [reposubs]. Для меня удобнее хранить эти группы в файле с шаблоном, поэтому это поля я оставляю пустым
-
config =
-
-
# Пример email шаблона, формат template задается форматом email, вначале headers, потом body
-
#Если headers отсутсвуют, то сообщение должно начинатся со знака \n, иначе email будет некорректным:
-
-
template = Subject:BigSite: push to production\n\ndetails: {baseurl}{webroot}/rev/{node|short}\nchangeset: {rev}:{node|short}\nuser: {author}\ndate: {date|date}\ndescription:\n{desc}\n
-
-
-
# max lines of diffs to include (0=none, -1=all)
-
-
maxdiff = 300
Теперь создадим файл hgrc /home/bigsite.com/.hg/hgrc главного репозитория, практически он будет похож на транзитный, только будет несколько изменен.
-
[paths]
-
default = /home/repos/mybigsite
-
-
[extensions]
-
-
hgext.notify =
-
-
-
-
[hooks]
-
-
# уведомлеять о группе изменений в одном email
-
changegroup.notify = python:hgext.notify.hook
-
-
# уведомлеять о каждом отдельном изменении в отдельном email
-
#incoming.notify = python:hgext.notify.hook
-
-
-
-
[email]
-
-
#поле From in Email
-
from = notifications@mybigsite.com
-
-
#поле Subject и другие заголовки письма прописываются в шаблоне письма, смотрите поле template ниже
-
-
-
[usersubs]
-
-
# key is subscriber email, value is comma-separated list of glob patterns
-
-
developer@mybigsite.com = *
-
-
admin@mybigsite .com = *
-
-
-
-
[reposubs]
-
-
# key is glob pattern, value is comma-separated list of subscriber emails
-
-
developer@mybigsite.com = *
-
-
admin@mybigsite .com
-
-
-
[smtp]
-
-
host = localhost
-
-
# Optional options:
-
-
# username = joeuser
-
-
# password = secret
-
-
# port = 25
-
-
# tls = true
-
-
# local_hostname = me.example.com
-
-
-
-
# presently it is necessary to specify the baseurl for the notify
-
-
# extension to work. It can be a dummy value if your repo isn't
-
# available via http
-
[web]
-
baseurl = https://intranet.mybigsite.com/hgserver/...
-
[notify]
-
# пишем через пробел события которые мы перехватываем, нам надо ловить pull в главном репозитории
-
sources = pull
-
# set this to False when you're ready for mail to start sending
-
-
test = False
-
-
# В config можно указать путь к файлу с подписчиками, он содержит группы [userssubs] и [reposubs]. Для меня удобнее хранить эти группы в файле с шаблоном, поэтому это поля я оставляю пустым
-
config =
-
-
# Пример email шаблона, формат template задается форматом email, вначале headers, потом body
-
#Если headers отсутсвуют, то сообщение должно начинатся со знака \n, иначе email будет некорректным:
-
-
template = Subject:BigSite: update production\n\ndetails: {baseurl}{webroot}/rev/{node|short}\nchangeset: {rev}:{node|short}\nuser: {author}\ndate: {date|date}\ndescription:\n{desc}\n
-
-
-
# max lines of diffs to include (0=none, -1=all)
-
-
maxdiff = 300
Вот и все, теперь вы будете всегда в курсе, что, где и когда было изменено на вашем главном репозитории.
Спасибо.
Именно такую систему мы используем в нашей разработке. Поэтому обязательно оставляйте комментарии с предложениями и вопросами.
