Как заставить Subversion (SVN) отправлять электронную почту при проверках?

Я всегда считал, что сообщения с проверкой (фиксацией) очень полезны для отслеживания работы других людей в базе кода / репозитории. Как настроить SVN для отправки списка рассылки по электронной почте при каждой фиксации?

Я использую клиенты в Windows и сервер Apache Subversion в Linux. Однако приведенные ниже ответы для различных платформ, скорее всего, будут полезны другим людям.

Ответов (16)

Решение

Вы используете перехватчики после фиксации . Вот инструкция .

Вот пример сценария Ruby, который отправляет электронное письмо после каждой фиксации: commit-email.rb

Взгляните на автономный инструмент Subversion Notify (только для Windows!). Он может отправлять электронную почту при фиксации, а также многое другое!

В каталоге «hooks» вашей конкретной ветки Subversion есть 9 файлов шаблонов, которые помогут вам начать работу.

Ключевой момент: Subversion не будет запускать какие-либо файлы, пока они не будут переименованы. Чтобы post-commit.tmpl запускался под unix, переименуйте его в post-commit. В Windows переименуйте его в post-commit.bat или post-commit.exe. Subversion не выполнит файл, если он называется «post-commit.tmpl», «post-commit.sh» или подобное.

Кроме того, убедитесь, что файл запускается тем же пользователем, который запускает Subversion.

Также SVNMailer , который работает в Linux.

VisualSVN Server имеет полезную функцию уведомления о фиксации по электронной почте VisualSVNServerHooks.exe . Он поддерживает цветные различия и может отправлять уведомления о фиксации только тогда, когда фиксация затрагивает определенный путь к репозиторию.

См. «Настройка уведомлений по электронной почте на сервере VisualSVN» .

1) Установите svnnotify на svn-сервер с помощью sudo apt-get

2) Используйте ловушку после фиксации вашего репо (читайте о крючках после фиксации на веб-сайте svn)

3) Откройте файл ловушки после фиксации и вставьте следующий код, чтобы отправить электронное письмо с помощью SMTP-сервера. Использовать smtp просто, поскольку вам не нужно настраивать sendmail.

4) Убедитесь, что после \ (разрыва строки) у вас нет лишнего пробела.

#!/bin/sh

REPOS="$1"
REV="$2"
TO="[email protected]" # who will receive the notifications
FROM="[email protected]" # what will be in "FROM" fields


 /usr/bin/svnnotify \

--repos-path "$REPOS" \
--revision "$REV" \
--to $TO \
--from $FROM \
--reply-to $FROM \
--smtp "YOUR.SMTP.MAIL.COM" \
--subject-prefix "[svn commit]" \
--attach-diff -a \
--header 'Message generated on Subversion Check-in.' \
--footer 'OpenSource Team. ' \
--svnlook "/usr/local/bin/svnlook" \
--handler HTML::ColorDiff # make diff pretty

Я сделал это на сервере Linux за 3 шага:

  1. Создайте список рассылки ( [email protected]) и добавьте людей в список.

  2. Редактировать /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

  3. Добавьте эту строку в свой /path_to_your_svn/svn/hooks/post-commitфайл:
    /path_to_your_svn/svn/hooks/svn-notify/mailer.py commit "$REPOS" "$REV" /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

Проверьте пакет svn-mod-email , описанный здесь . СВН-мод-почта является мощным инструментом для управления SVN уведомлений по электронной почте, которая поставляется в архиве Debian. Его легко установить, настроить и использовать.

Там есть связанный с этим вопрос здесь на пост фиксации крючки. Лично я предпочитаю отправлять сообщение тому, с чего я могу получить RSS-канал, так как электронная почта за фиксацию довольно быстро перегрузит мой почтовый ящик.

Второй @ Мэтт Миллер в RSS- потоках .

Есть полезный инструмент под названием WebSVN, который предлагает RSS-каналы каждого репозитория и отдельных веток / тегов / папок с полными сообщениями фиксации. Это также отличный веб-интерфейс для быстрого просмотра истории файлов и коммитов / различий без необходимости запускать обновление и открывать выбранный вами редактор.

Какая платформа?

В Mac OS X я установил msmtp и создал сценарий после фиксации под хуками в репозитории. Для пользователя svn (или www ) необходимо настроить файл .msmtprc .

REPOS="`echo $1 | sed 's/\/{root of repository}//g'` "
REV="$2"
MSG=`/usr/local/bin/svn log -v -r HEAD https://localhost$REPOS`

/usr/local/bin/msmtp {list of recipients} <<EOF
Subject: SVN-Commit $REPOS#$REV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8Bit

$MSG
EOF

Сделайте {root of repository} и {list of recipients} под ваши нужды. Обратите внимание, я использовал UTF-8, потому что у нас есть некоторые специальные символы здесь, в Швеции (åäö).

В исходный код Subversion включен (большой) пример, написанный на Perl (его можно посмотреть здесь ).

Вы захотите ознакомиться с ловушками репозитория , особенно с ловушкой после фиксации .

Как сказал кто-то другой, «какая платформа». В Windows я использовал для этого «blat», бесплатную почтовую программу SMTP из командной строки, а также пост-фиксацию и еще один пакетный файл.

Фиксация сообщения выглядит так: (просто вызывает другой командный файл)

 call d:\subversion\repos\rts\hooks\mail %1 %2

И mail.bat выглядел так:

copy d:\subversion\repos\RTS\hooks\Commitmsg.txt %temp%\commit.txt
copy d:\subversion\repos\RTS\hooks\subjbase.txt %temp%\subject.txt
svnlook info -r %2 %1 >> %temp%\commit.txt
echo Revision %2 >> %temp%\commit.txt
svnlook changed -r %2 %1 >> %temp%\commit.txt
svnlook author -r %2 %1 >> %temp%\subject.txt
c:\utils\blat %temp%\commit.txt -t <[email protected]> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <[email protected]>" -noh2

Самая большая проблема при написании ловушек SVN заключается в том, что у вас может быть в основном НЕТ настройки среды - без пути exe, без временного пути и т. Д. Хотя, возможно, это улучшено в более поздних сборках SVN.

Я использую пост-скрипт совершить подобное этому одному .

Он отправляет красивое электронное письмо в формате HTML. Я обновил его, где он выделяет код, который был удален, красным цветом, и код, который был добавлен синим.

Вы можете использовать buildbot . Это инструмент, который может предпринимать произвольные действия всякий раз, когда происходит регистрация. Это полнофункциональная система непрерывной интеграции, но если вам просто нужна электронная почта, она, безусловно, справится с этим. Он имеет плагины для множества SCM, включая SVN.