<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>joey nelson &#187; subversion</title>
	<atom:link href="http://jnjnjn.com/category/subversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://jnjnjn.com</link>
	<description></description>
	<lastBuildDate>Mon, 19 Dec 2011 14:49:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Subversion commit email notification script</title>
		<link>http://jnjnjn.com/56/subversion-commit-email-notification-script/</link>
		<comments>http://jnjnjn.com/56/subversion-commit-email-notification-script/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 16:36:37 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/56/subversion-commit-email-notification-script/</guid>
		<description><![CDATA[So I&#8217;ve been using Subversion on a Linux box for a while now to manage my code for various freelance and personal projects.  I&#8217;ve recently started working with some other people who need access to the server, and I wanted to receive emails when they make a commit.  I also didn&#8217;t want to [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been using Subversion on a Linux box for a while now to manage my code for various freelance and personal projects.  I&#8217;ve recently started working with some other people who need access to the server, and I wanted to receive emails when they make a commit.  I also didn&#8217;t want to deal with <a href="http://search.cpan.org/dist/SVN-Notify/">svnnotify</a> (um, or I possibly didn&#8217;t know about it until it was too late).  Luckily Subversion makes it very easy to write a post-commit script to do this.  Here&#8217;s the ruby script I ended up with:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color: #808080; font-style: italic;">#!/usr/bin/ruby</span>
<span style="color: #888888;">require</span> <span style="color: #888888; background-color: #fbf6c5;">'rubygems'</span>
<span style="color: #888888;">require</span> <span style="color: #888888; background-color: #fbf6c5;">'action_mailer'</span>
&nbsp;
<span style="color: #888888">class</span> SimpleMailer &lt; <span style="">ActionMailer::Base</span>
  <span style="color: #888888">def</span> simple_message<span style="color: #bbbbbb;">&#40;</span>to, <span style="color: #888888;">sub</span>, message<span style="color: #bbbbbb;">&#41;</span>			                
    from <span style="color: #888888; background-color: #fbf6c5;">'walrus svn &lt;svn@wlrs.net&gt;'</span>					                
    recipients to.<span style="color: #F8320D;">join</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;, &quot;</span><span style="color: #bbbbbb;">&#41;</span>
    subject <span style="color: #888888;">sub</span>
    body message
  <span style="color: #888888">end</span>
<span style="color: #888888">end</span>
&nbsp;
path = ARGV<span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">0</span><span style="color: #bbbbbb;">&#93;</span>
revision = ARGV<span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">1</span><span style="color: #bbbbbb;">&#93;</span>
&nbsp;
user = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook author #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
log = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook log #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
changed = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook changed #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
diff = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook diff #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
dirs = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook dirs-changed #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
date = <span style="color: #888888; background-color: #fbf6c5;">`/usr/bin/svnlook date #{path} -r #{revision}`</span>.<span style="color: #888888;">chomp</span>
&nbsp;
dir_list = dirs.<span style="color: #888888;">split</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #bbbbbb;">&#41;</span>.<span style="color: #F8320D;">collect</span> <span style="color: #888888">do</span> |dir| 
  dir =~ /<span style="color: #bbbbbb;">&#40;</span><span style="color: #bbbbbb;">&#91;</span>^\/<span style="color: #bbbbbb;">&#93;</span>+<span style="color: #bbbbbb;">&#41;</span>/
  $<span style="color: #F8320D;">1</span>
<span style="color: #888888">end</span>
dir_list.<span style="color: #F8320D;">uniq</span>!
&nbsp;
recipients = <span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;joey@wlrs.net&quot;</span><span style="color: #bbbbbb;">&#93;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#other people might want these emails</span>
recipients &lt;&lt; <span style="color: #888888; background-color: #fbf6c5;">&quot;team@mycompany.com&quot;</span> <span style="color: #888888">if</span> dir_list.<span style="color: #888888">include</span>?<span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;mycompany.com&quot;</span><span style="color: #bbbbbb;">&#41;</span>
recipients &lt;&lt; <span style="color: #888888; background-color: #fbf6c5;">&quot;someone.else@oursite.com&quot;</span> <span style="color: #888888">if</span> dir_list.<span style="color: #888888">include</span>?<span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;oursite.com&quot;</span><span style="color: #bbbbbb;">&#41;</span>
&nbsp;
subject_log = log.<span style="color: #888888;">split</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">0</span><span style="color: #bbbbbb;">&#93;</span>.<span style="color: #F8320D;">slice</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">0</span>..<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>
dir_string = dir_list.<span style="color: #F8320D;">join</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;, &quot;</span><span style="color: #bbbbbb;">&#41;</span>
subject = <span style="color: #888888; background-color: #fbf6c5;">&quot;r#{revision} #{user} in #{dir_string}: <span style="color: #000099; font-weight: bold;">\&quot;</span>#{subject_log}<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>
message = <span style="color: #888888; background-color: #fbf6c5;">&quot;#{user} committed these changes on #{date}:<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>#{log}<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>#{changed}<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>#{diff}&quot;</span>
<span style="">ActionMailer::Base</span>.<span style="color: #F8320D;">smtp_settings</span> = <span style="color: #bbbbbb;">&#123;</span> <span style="">:address</span> =&gt; <span style="color: #888888; background-color: #fbf6c5;">'localhost'</span>, <span style="">:port</span> =&gt; <span style="color: #F8320D;">25</span>, <span style="">:domain</span> =&gt; <span style="color: #888888; background-color: #fbf6c5;">'localdomain'</span><span style="color: #bbbbbb;">&#125;</span>
SimpleMailer.<span style="color: #F8320D;">deliver_simple_message</span><span style="color: #bbbbbb;">&#40;</span>recipients, subject, message<span style="color: #bbbbbb;">&#41;</span></pre></div></div>

<p>Projects in my repository are setup like this:</p>
<pre>
svn/oursite.com/trunk
svn/mycompany.com/trunk
</pre>
<p>That means we just look at the svn directory to see which project is being modified, then we alert the appropriate people.  The emails are plain text and include the commit comments, modified files, and a full diff of the commit.  What else do you need?</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/56/subversion-commit-email-notification-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

