Subversion: уведомления о коммитах в определённую ветку

Date June 2nd, 2011 Author Vitaly Agapov

— Вы получили сообщение.
— Да.
— Вы не хотите прочитать его? Там может быть что-то важное.
— Да, последние два тоже были важными. Первое было от моей жены, она сообщала, что уходит от меня. Второе было от моего адвоката, он сказал, что уходит от меня… с моей женой.
— Эхехе, не повезло! Но как считал дедушка, за дождливым днём придёт ясный. Это добрая весть. А да, спорим на ужин.
— Ладно.
— Вы уволены?!! Вот жалость…

– «Пятый элемент»

Для реализации сабжа нам понадобится скрипт mailer.py, который можно раздобыть либо из репозиториев вместе с пакетом subversion-tools, либо скачать с офсайта:

http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer/mailer.py
http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/mailer/mailer.conf.example

Само собой, понадобится и интерпретатор Python.

Здесь рассмотрю только конкретную задачу. Полная документация по svnmailer есть здесь.

В целом, шаги будут выглядеть следующим образом:

  1. Скачиваем себе скрипт и файл настроек или просто ищем, куда их положил менеджер пакетов при установке.
  2. Самому скрипту делаем chmod a+x, а файл настроек переименовываем из mailer.conf.example в mailer.conf.
  3. Правим mailer.conf и делаем из него что-то такое:
    [general]
    # здесь нужен правильный путь к команде для отправки почты
    mail_command = /usr/sbin/sendmail     
    smtp_hostname = <адрес нашего почтового сервера>
    [defaults]
    [some_group]
    # если нужен определённые репозиторий, то его можно здесь задать регулярным выражением
    for_repos = .*  
    # здесь путь к нужно ветке, о коммитах в которую будут высылаться нотификации
    for_paths = .*/some/path/.* 
    diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s
    commit_subject_prefix =
    propchange_subject_prefix =
    lock_subject_prefix =
    unlock_subject_prefix =
    
    # что использовать в качестве адреса отправителя
    from_addr = svn 
    # список получателей через пробел
    to_addr = first@example.com second@example.com 
    reply_to =
    
    generate_diffs = add copy modify
    show_nonmatching_paths = yes
    [maps]
    
  4. Внутри директории проекта есть директория hooks, где лежат скрипты, выполняемые Subversion при определённых событиях в системе. В нашем случае нужен скрипт post-commit (придется переименовать post-commit.tmpl в post-commit). Внутри должны быть такие строки:
    REPOS="$1"
    REV="$2"
    /path/to/our/mailer.py commit "$REPOS" "$REV"
    
  5. Файлу post-commit надо сделать chmod a+x.
  6. Проверяем, что всё ок.

Tags: ,
Category: Linux | 1 Comment »

Comments

Один комментарий на “Subversion: уведомления о коммитах в определённую ветку”

  1. Михаил

    Спасибо за пример. Все получилось.

Leave a comment

 Comment Form