HG Mercurial email уведомления

В каждом серьезном проекте используется контроль версий и разработку зачастую ведет не один программист. Как минимум, кроме программиста есть еще и главный программист, который следит за качеством разработки.
С помощью hg mercural мы можем предоставить главному программисту мониторинг изменений в репозитории, особенно когда это касается обновления главной ветки.
В mercurial для этого есть замечательный встроенный плагин notify, который поможет нам настроить уведомления по email.

Схема репозиториев будет следующая:

  1. Главный /www/mybigsite.com/
  2. Транзитный /home/repos/mybigsite
  3. Репозиторий разработчика находится в его домашнем каталоге.

Когда разработчику надо отправить новую порцию изменений в главный репозиторий, он:

  1. Отправляет данные в транзитный репозиторий (команда hg pus)
  2. А потом главный разработчик проверяет изменения и обновляет главный репозиторий (команда hg pus && hg up)

Настроим два уведомления:

  1. По событию hg pus в транзитный репозиторий - будем отправлять diff изменений главному программисту. Таких обновлений (hg pus) разработчик или разработчики могут сделать несколько, до того как будет обновлен главный репозиторий.
  2. Главный программист получив уведомления об обновлении транзитного репозитория проверяет изменения и обновляет главный репозиторий. По этому событию мы отправляем главному разработчику новую порцию diff изменений, который содержит именно все порции обновлений, что попали на главный репозиторий.

Теперь перейдем к настройке уведомлений используя hghook notify.
Открываем файл команд hgrc транзитного репозитория, если файла нет, то создаем его /home/repos/mybigsite/.hg/hgrc и добавляем следующие строки

CODE:
  1. [extensions]
  2.  
  3. hgext.notify =
  4.  
  5.  
  6.  
  7. [hooks]
  8.  
  9. # уведомлеять о группе изменений в одном email
  10. changegroup.notify = python:hgext.notify.hook
  11.  
  12. # уведомлеять о каждом отдельном изменении в отдельном email
  13. #incoming.notify = python:hgext.notify.hook
  14.  
  15.  
  16.  
  17. [email]
  18.  
  19. #поле From in Email
  20. from = notifications@mybigsite.com
  21.  
  22. #поле Subject и другие заголовки письма прописываются в шаблоне письма, смотрите поле template ниже
  23.  
  24.  
  25. [usersubs]
  26.  
  27. # key is subscriber email, value is comma-separated list of glob patterns
  28.  
  29. developer@mybigsite.com = *
  30.  
  31. admin@mybigsite .com = *
  32.  
  33.  
  34.  
  35. [reposubs]
  36.  
  37. # key is glob pattern, value is comma-separated list of subscriber emails
  38.  
  39. developer@mybigsite.com = *
  40.  
  41. admin@mybigsite .com
  42.  
  43.  
  44. [smtp]
  45.  
  46. host = localhost
  47.  
  48. # Optional options:
  49.  
  50. # username = joeuser
  51.  
  52. # password = secret
  53.  
  54. # port = 25
  55.  
  56. # tls = true
  57.  
  58. # local_hostname = me.example.com
  59.  
  60.  
  61.  
  62. # presently it is necessary to specify the baseurl for the notify
  63.  
  64. # extension to work.  It can be a dummy value if your repo isn't
  65. # available via http
  66. [web]
  67. baseurl = https://intranet.mybigsite.com/hgserver/...
  68. [notify]
  69. # пишем через пробел события которые мы перехватываем, нам надо ловить push в транзитмно репозитории
  70. sources = push
  71. # set this to False when you're ready for mail to start sending
  72.  
  73. test = False
  74.  
  75. # В config можно указать путь к файлу с подписчиками, он содержит группы [userssubs] и [reposubs]. Для меня удобнее хранить эти группы в файле с шаблоном, поэтому это поля я оставляю пустым
  76. config =
  77.  
  78. # Пример email шаблона, формат template задается форматом email, вначале headers, потом body
  79. #Если headers отсутсвуют, то сообщение должно начинатся со знака \n, иначе email будет некорректным:
  80.  
  81. 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
  82.  
  83.  
  84. # max lines of diffs to include (0=none, -1=all)
  85.  
  86. maxdiff = 300

Теперь создадим файл hgrc /home/bigsite.com/.hg/hgrc главного репозитория, практически он будет похож на транзитный, только будет несколько изменен.

CODE:
  1. [paths]
  2. default = /home/repos/mybigsite
  3.  
  4. [extensions]
  5.  
  6. hgext.notify =
  7.  
  8.  
  9.  
  10. [hooks]
  11.  
  12. # уведомлеять о группе изменений в одном email
  13. changegroup.notify = python:hgext.notify.hook
  14.  
  15. # уведомлеять о каждом отдельном изменении в отдельном email
  16. #incoming.notify = python:hgext.notify.hook
  17.  
  18.  
  19.  
  20. [email]
  21.  
  22. #поле From in Email
  23. from = notifications@mybigsite.com
  24.  
  25. #поле Subject и другие заголовки письма прописываются в шаблоне письма, смотрите поле template ниже
  26.  
  27.  
  28. [usersubs]
  29.  
  30. # key is subscriber email, value is comma-separated list of glob patterns
  31.  
  32. developer@mybigsite.com = *
  33.  
  34. admin@mybigsite .com = *
  35.  
  36.  
  37.  
  38. [reposubs]
  39.  
  40. # key is glob pattern, value is comma-separated list of subscriber emails
  41.  
  42. developer@mybigsite.com = *
  43.  
  44. admin@mybigsite .com
  45.  
  46.  
  47. [smtp]
  48.  
  49. host = localhost
  50.  
  51. # Optional options:
  52.  
  53. # username = joeuser
  54.  
  55. # password = secret
  56.  
  57. # port = 25
  58.  
  59. # tls = true
  60.  
  61. # local_hostname = me.example.com
  62.  
  63.  
  64.  
  65. # presently it is necessary to specify the baseurl for the notify
  66.  
  67. # extension to work.  It can be a dummy value if your repo isn't
  68. # available via http
  69. [web]
  70. baseurl = https://intranet.mybigsite.com/hgserver/...
  71. [notify]
  72. # пишем через пробел события которые мы перехватываем, нам надо ловить pull в главном репозитории
  73. sources = pull
  74. # set this to False when you're ready for mail to start sending
  75.  
  76. test = False
  77.  
  78. # В config можно указать путь к файлу с подписчиками, он содержит группы [userssubs] и [reposubs]. Для меня удобнее хранить эти группы в файле с шаблоном, поэтому это поля я оставляю пустым
  79. config =
  80.  
  81. # Пример email шаблона, формат template задается форматом email, вначале headers, потом body
  82. #Если headers отсутсвуют, то сообщение должно начинатся со знака \n, иначе email будет некорректным:
  83.  
  84. 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
  85.  
  86.  
  87. # max lines of diffs to include (0=none, -1=all)
  88.  
  89. maxdiff = 300

Вот и все, теперь вы будете всегда в курсе, что, где и когда было изменено на вашем главном репозитории.

Спасибо.
Именно такую систему мы используем в нашей разработке. Поэтому обязательно оставляйте комментарии с предложениями и вопросами.

Leave a Reply