<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -2,40 +2,58 @@ require File.join(File.dirname(__FILE__), *%w[example_helper])
 
 describe CapGun::Presenter do 
 
-  describe &quot;git details&quot; do
+  describe &quot;scm details&quot; do
   
-    it &quot;does nothing if git is not the scm&quot; do
-      presenter = CapGun::Presenter.new(stub(&quot;capistrano&quot;, :scm =&gt; :svn))
-      presenter.git_details.should == nil
+    it &quot;does nothing if the scm is not git nor subversion&quot; do
+      presenter = CapGun::Presenter.new(stub(&quot;capistrano&quot;, :scm =&gt; :mercurial))
+      presenter.scm_details.should == nil
     end
   
     it &quot;collects branch and git log details if git is scm&quot; do
       capistrano = {:scm =&gt; :git, :branch =&gt; &quot;edge&quot;}
       presenter = CapGun::Presenter.new(capistrano)
-      presenter.expects(:git_log).returns(&quot;xxxxx&quot;)
+      presenter.expects(:scm_log).returns(&quot;xxxxx&quot;)
     
-      details = presenter.git_details
+      details = presenter.scm_details
       details.should include(&quot;Branch: edge&quot;)
       details.should include(&quot;xxxxx&quot;)
     end
   end
 
-  describe &quot;git log messages&quot; do
+  describe &quot;scm log messages&quot; do
+    describe &quot;with git&quot; do
+      it &quot;returns N/A if the git log call returns an error&quot; do
+        capistrano = {:scm =&gt; :git, :previous_revision =&gt; &quot;previous-sha&quot;, :current_revision =&gt; &quot;current-sha&quot; }
+        presenter = CapGun::Presenter.new(capistrano)
+        presenter.stubs(:`).returns(&quot;fatal: Not a git repo&quot;)
+        presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; false))
+        presenter.scm_log_messages.should == &quot;N/A&quot;
+      end
 
-    it &quot;returns N/A if the git log call returns an error&quot; do
-      capistrano = { :previous_revision =&gt; &quot;previous-sha&quot;, :current_revision =&gt; &quot;current-sha&quot; }
-      presenter = CapGun::Presenter.new(capistrano)
-      presenter.stubs(:`).returns(&quot;fatal: Not a git repo&quot;)
-      presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; false))
-      presenter.git_log_messages.should == &quot;N/A&quot;
+      it &quot;calls git log with previous_rev..current_rev&quot; do
+        capistrano = {:scm =&gt; :git, :previous_revision =&gt; &quot;previous-sha&quot;, :current_revision =&gt; &quot;current-sha&quot; }
+        presenter = CapGun::Presenter.new(capistrano)
+        presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; true))
+        presenter.expects(:`).with(includes(&quot;git log previous-sha..current-sha&quot;))
+        presenter.scm_log_messages
+      end
     end
-  
-    it &quot;calls git log with previous_rev..current_rev&quot; do
-      capistrano = { :previous_revision =&gt; &quot;previous-sha&quot;, :current_revision =&gt; &quot;current-sha&quot; }
-      presenter = CapGun::Presenter.new(capistrano)
-      presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; true))
-      presenter.expects(:`).with(includes(&quot;git log previous-sha..current-sha&quot;))
-      presenter.git_log_messages
+    describe &quot;with subversion&quot; do
+      it &quot;returns N/A if the svn log call returns an error&quot; do
+        capistrano = {:scm =&gt; :subversion, :previous_revision =&gt; &quot;42&quot;, :current_revision =&gt; &quot;46&quot; }
+        presenter = CapGun::Presenter.new(capistrano)
+        presenter.stubs(:`).returns(&quot;fatal: Not a working copy&quot;)
+        presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; false))
+        presenter.scm_log_messages.should == &quot;N/A&quot;
+      end
+
+      it &quot;calls svn log with -r previous_rev+1:current_rev&quot; do
+        capistrano = {:scm =&gt; :subversion, :previous_revision =&gt; &quot;42&quot;, :current_revision =&gt; &quot;46&quot; }
+        presenter = CapGun::Presenter.new(capistrano)
+        presenter.stubs(:exit_code).returns(stub(&quot;process status&quot;, :success? =&gt; true))
+        presenter.expects(:`).with(includes(&quot;svn log -r 43:46&quot;))
+        presenter.scm_log_messages
+      end
     end
   end
 </diff>
      <filename>examples/presenter_example.rb</filename>
    </modified>
    <modified>
      <diff>@@ -41,29 +41,36 @@ module CapGun
       &quot;Branch: #{capistrano[:branch]}&quot; unless capistrano[:branch].nil? || capistrano[:branch].empty?
     end
 
-    def git_details
-      return unless capistrano[:scm].to_sym == :git
+    def scm_details
+      return unless [:git,:subversion].include? capistrano[:scm].to_sym
       &lt;&lt;-EOL
 #{branch}
-#{git_log}
+#{scm_log}
       EOL
       rescue
         nil
     end
 
-    def git_log
-      &quot;\nCommits since last release\n====================\n#{git_log_messages}&quot;
+    def scm_log
+      &quot;\nCommits since last release\n====================\n#{scm_log_messages}&quot;
     end
 
-    def git_log_messages
-      messages = `git log #{capistrano[:previous_revision]}..#{capistrano[:current_revision]} --pretty=format:%h:%s`
+    def scm_log_messages
+      messages = case capistrano[:scm].to_sym
+        when :git
+          `git log #{capistrano[:previous_revision]}..#{capistrano[:current_revision]} --pretty=format:%h:%s`
+        when :subversion
+          `svn log -r #{capistrano[:previous_revision].to_i+1}:#{capistrano[:current_revision]}`
+        else
+          &quot;N/A&quot;
+      end
       exit_code.success? ? messages : &quot;N/A&quot;
     end
-    
+
     def exit_code
       $?
     end
-    
+
     # Gives you a prettier date/time for output from the standard Capistrano timestamped release directory.
     # This assumes Capistrano uses UTC for its date/timestamped directories, and converts to the local
     # machine timezone.
@@ -125,7 +132,7 @@ Previous Release Revision: #{capistrano[:previous_revision]}
 Repository: #{capistrano[:repository]}
 Deploy path: #{capistrano[:deploy_to]}
 Domain: #{capistrano[:domain]}
-#{git_details}
+#{scm_details}
 EOL
     end
 </diff>
      <filename>lib/cap_gun/presenter.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>af41053984486bc5ac5ea81b1daa8fbe2ce238cf</id>
    </parent>
  </parents>
  <author>
    <name>Olivier Brisse</name>
    <email>ouranos@donarproject.org</email>
  </author>
  <url>http://github.com/relevance/cap_gun/commit/6a8e79d8a2e0357afe081ac681a5e40bcc982d9a</url>
  <id>6a8e79d8a2e0357afe081ac681a5e40bcc982d9a</id>
  <committed-date>2009-11-04T22:24:00-08:00</committed-date>
  <authored-date>2009-11-04T22:24:00-08:00</authored-date>
  <message>Added simple subversion support.</message>
  <tree>749bc41fd4a0565d9615f7a8e55d4aa6941e7522</tree>
  <committer>
    <name>Olivier Brisse</name>
    <email>ouranos@donarproject.org</email>
  </committer>
</commit>
