Thursday, February 3, 2011

How do I make Subversion (SVN) send email on checkins?

I've always found checkin mails to be very useful for keeping track of what work other people are doing in the codebase. How do I set up SVN to email a distribution list on each checkin?

Edit: I'm running clients on Windows and the server on Linux. The answers below for various platforms will likely be useful to other people though.

  • You'll want to familiarize yourself with repository hooks, particularly the post-commit hook

    From Rytmis
  • You use the post-commit hooks. Here's a guide: http://builddeploy.blogspot.com/2008/01/implementing-subversion-post-commit.html

    Here's a sample script that sends an email after each commit: commit-email.rb

    From pix0r
  • What platform?

    On Mac OS X I have installed msmtp and created a post-commit script under hooks in the repository. A .msmtprc file needs to be setup for the svn (or www) user.

    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 recipents} <<EOF
    Subject: SVN-Commit $REPOS#$REV
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8Bit
    
    $MSG
    EOF
    

    Make {root of repository} and {list of recipents} specific for your needs. Note I have used UTF8 because we have some special characters here in sweden (åäö)

    From epatel
  • There is a (large) example written in Perl included in the Subversion source (it can be viewed here).

  • Have a look at Subversion Notify (Windows only)

    http://sourceforge.net/projects/svn-notify/

    http://www.subversionnotify.com/

    It can do emailing on commit and also much more!

    From Marius
  • There's a related question here on post-commit hooks. Personally, I prefer to send a message to something I can get an RSS feed from, as an email-per-commit would overload my inbox pretty quickly.

  • Seconding @Matt Miller on RSS feeds.

    There's a useful tool called WebSVN that offers RSS feeds of every repository and individual branches/tags/folders with full commit messages. It's also a great web interface for quickly looking at file histories and commits/diffs without having to run an update and open your editor of choice.

  • As someone else said, 'what platform'. On Windows I've used 'blat', which is a freebie command line SMTP mailer to do this, along with a post-commit and another batch file.

    The post commit looks like this: (Just calls another batch file)

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

    And mail.bat looked like this:

    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 <me@my.email.com> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <svn@my.email.com>" -noh2
    

    The biggest gotcha in writing SVN hooks is that you might have basically NO environment set-up - no exe path, no temp path, etc. Though maybe that's improved in more recent SVN builds.

    From Will Dean
  • I use a post-commit script similar to this one

    It's sends a nice HTML email. I updated it some where it highlights code that was removed in red and highlights code that was added in blue.

  • You could use buildbot. It's a tool that can take arbitrary action whenever a check-in occurs. It's a full featured continuous integration system but if you just want emails it can certainly handle that. It has plug-ins for a variety of SCMs including SVN.

    From whitney
  • I have understand a Bit from you Guys. Thanks

    I am using WINDOWS 2003 AS Subversion Server. Now i want to send Emails whenever a File get Updated in Developer's workspace in Trunk.

    i HAVE understand that this is possible due to "Post-Commit Hook" and you may write down a Batch file.

    Please set an Example for this

    Awaiting your response

    Regards WSBokhari

    Casebash : If you wish to ask another question, please do it as a question, not an answer
  • In the "hooks" directory of your specific subversion branch there are 9 template files to get you started.

    Key point: subversion will not execute any of the files until they are renamed. To get post-commit.tmpl to execute under unix, rename it "post-commit". Under Windows, rename it to "post-commit.bat" or "post-commit.exe". Subversion will not execute the file if it is named "post-commit.tmpl" or "post-commit.sh" or the like.

    Also, make sure that the file is executable by the same user that runs subversion.

    From Logan

0 comments:

Post a Comment