<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -28,6 +28,11 @@ class Repository::Darcs &lt; Repository
     'Darcs'
   end
   
+  def entry(path=nil, identifier=nil)
+    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    scm.entry(path, patch.nil? ? nil : patch.scmid)
+  end
+  
   def entries(path=nil, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     entries = scm.entries(path, patch.nil? ? nil : patch.scmid)
@@ -46,6 +51,11 @@ class Repository::Darcs &lt; Repository
     entries
   end
   
+  def cat(path, identifier=nil)
+    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
+    scm.cat(path, patch.nil? ? nil : patch.scmid)
+  end
+  
   def diff(path, rev, rev_to)
     patch_from = changesets.find_by_revision(rev)
     return nil if patch_from.nil?</diff>
      <filename>app/models/repository/darcs.rb</filename>
    </modified>
    <modified>
      <diff>@@ -24,8 +24,8 @@ Git
 ---
 gunzip &lt; test/fixtures/repositories/git_repository.tar.gz | tar -xv -C tmp/test
 
-Darcs
------
+Darcs (2.0+ required)
+---------------------
 gunzip &lt; test/fixtures/repositories/darcs_repository.tar.gz | tar -xv -C tmp/test
 
 FileSystem</diff>
      <filename>doc/RUNNING_TESTS</filename>
    </modified>
    <modified>
      <diff>@@ -25,16 +25,36 @@ module Redmine
         # Darcs executable name
         DARCS_BIN = &quot;darcs&quot;
         
+        class &lt;&lt; self
+          def client_version
+            @@client_version ||= (darcs_binary_version || [])
+          end
+  	  
+          def darcs_binary_version
+            cmd = &quot;#{DARCS_BIN} --version&quot;
+            version = nil
+            shellout(cmd) do |io|
+              # Read darcs version in first returned line
+              if m = io.gets.match(%r{((\d+\.)+\d+)})
+                version = m[0].scan(%r{\d+}).collect(&amp;:to_i)
+              end
+            end
+            return nil if $? &amp;&amp; $?.exitstatus != 0
+            version
+          end
+        end
+
         def initialize(url, root_url=nil, login=nil, password=nil)
           @url = url
           @root_url = url
         end
 
         def supports_cat?
-          false
+          # cat supported in darcs 2.0.0 and higher
+          self.class.client_version_above?([2, 0, 0])
         end
-              
-        # Get info about the svn repository
+
+        # Get info about the darcs repository
         def info
           rev = revisions(nil,nil,nil,{:limit =&gt; 1})
           rev ? Info.new({:root_url =&gt; @url, :lastrev =&gt; rev.last}) : nil
@@ -114,6 +134,19 @@ module Redmine
           diff
         end
         
+        def cat(path, identifier=nil)
+          cmd = &quot;#{DARCS_BIN} show content --repodir #{@url}&quot;
+          cmd &lt;&lt; &quot; --match \&quot;hash #{identifier}\&quot;&quot; if identifier
+          cmd &lt;&lt; &quot; #{shell_quote path}&quot;
+          cat = nil
+          shellout(cmd) do |io|
+            io.binmode
+            cat = io.read
+          end
+          return nil if $? &amp;&amp; $?.exitstatus != 0
+          cat
+        end
+
         private
                 
         def entry_from_xml(element, path_prefix)</diff>
      <filename>lib/redmine/scm/adapters/darcs_adapter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -48,6 +48,13 @@ class RepositoryDarcsTest &lt; Test::Unit::TestCase
       @repository.fetch_changesets
       assert_equal 6, @repository.changesets.count
     end
+    
+    def test_cat
+      @repository.fetch_changesets
+      cat = @repository.cat(&quot;sources/welcome_controller.rb&quot;, 2)
+      assert_not_nil cat
+      assert cat.include?('class WelcomeController &lt; ApplicationController')
+    end
   else
     puts &quot;Darcs test repository NOT FOUND. Skipping unit tests !!!&quot;
     def test_fake; assert true end</diff>
      <filename>test/unit/repository_darcs_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e339d0bcc01ee2aed3293899b5b5446840d81978</id>
    </parent>
  </parents>
  <author>
    <name>Jean-Philippe Lang</name>
    <email>jp_lang@yahoo.fr</email>
  </author>
  <url>http://github.com/artemv/redmine_tt/commit/d93f96765b6fc386cb5565985d02d9f6e71895c5</url>
  <id>d93f96765b6fc386cb5565985d02d9f6e71895c5</id>
  <committed-date>2008-08-25T07:33:30-07:00</committed-date>
  <authored-date>2008-08-25T07:33:30-07:00</authored-date>
  <message>Adds support for file viewing with Darcs 2.0+ (patch #1799 by Ralph Lange slightly edited).

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1759 e93f8b46-1217-0410-a6f0-8f06a7374b81</message>
  <tree>6b5ee5b223ff0e3cbec0d13584f0d7ae36fc9ba1</tree>
  <committer>
    <name>Jean-Philippe Lang</name>
    <email>jp_lang@yahoo.fr</email>
  </committer>
</commit>
