Patch #1799 ยป redmine-fix1794-allow-darcs-cat-r1747.patch
| lib/redmine/scm/adapters/darcs_adapter.rb (working copy) | ||
|---|---|---|
| 25 | 25 | 
    # Darcs executable name  | 
| 26 | 26 | 
    DARCS_BIN = "darcs"  | 
| 27 | 27 | 
     | 
| 28 | 
    class << self  | 
|
| 29 | 
    def client_version  | 
|
| 30 | 
    @@client_version ||= (darcs_binary_version || [])  | 
|
| 31 | 
    end  | 
|
| 32 | 
     | 
|
| 33 | 
    def darcs_binary_version  | 
|
| 34 | 
    	    cmd = "#{DARCS_BIN} --version"
   | 
|
| 35 | 
    version = nil  | 
|
| 36 | 
    shellout(cmd) do |io|  | 
|
| 37 | 
    # Read darcs version in first returned line  | 
|
| 38 | 
    	      if m = io.gets.match(%r{((\d+\.)+\d+)})
   | 
|
| 39 | 
    	        version = m[0].scan(%r{\d+}).collect(&:to_i)
   | 
|
| 40 | 
    end  | 
|
| 41 | 
    end  | 
|
| 42 | 
    return nil if $? && $?.exitstatus != 0  | 
|
| 43 | 
    version  | 
|
| 44 | 
    end  | 
|
| 45 | 
    end  | 
|
| 46 | ||
| 28 | 47 | 
    def initialize(url, root_url=nil, login=nil, password=nil)  | 
| 29 | 48 | 
    @url = url  | 
| 30 | 49 | 
    @root_url = url  | 
| 31 | 50 | 
    end  | 
| 32 | 51 | |
| 33 | 
    def supports_cat?  | 
|
| 34 | 
    false  | 
|
| 35 | 
    end  | 
|
| 36 | 
     | 
|
| 37 | 
    # Get info about the svn repository  | 
|
| 52 | 
    # Get info about the darcs repository  | 
|
| 38 | 53 | 
    def info  | 
| 39 | 54 | 
              rev = revisions(nil,nil,nil,{:limit => 1})
   | 
| 40 | 55 | 
              rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil
   | 
| ... | ... | |
| 114 | 129 | 
    diff  | 
| 115 | 130 | 
    end  | 
| 116 | 131 | 
     | 
| 132 | 
    def cat(path, identifier=nil)  | 
|
| 133 | 
    # cat supported in darcs 2.0.0 and higher  | 
|
| 134 | 
    return nil unless self.class.client_version_above?([2, 0, 0])  | 
|
| 135 | 
     | 
|
| 136 | 
    	  cmd = "#{DARCS_BIN} show content --repodir #{@url}"
   | 
|
| 137 | 
              cmd << " --match \"hash #{identifier}\"" if identifier
   | 
|
| 138 | 
              cmd << " #{path}"
   | 
|
| 139 | 
    cat = nil  | 
|
| 140 | 
    shellout(cmd) do |io|  | 
|
| 141 | 
    io.binmode  | 
|
| 142 | 
    cat = io.read  | 
|
| 143 | 
    end  | 
|
| 144 | 
    return nil if $? && $?.exitstatus != 0  | 
|
| 145 | 
    cat  | 
|
| 146 | 
    end  | 
|
| 147 | ||
| 117 | 148 | 
    private  | 
| 118 | 149 | 
     | 
| 119 | 150 | 
    def entry_from_xml(element, path_prefix)  | 
| app/models/repository/darcs.rb (working copy) | ||
|---|---|---|
| 28 | 28 | 
    'Darcs'  | 
| 29 | 29 | 
    end  | 
| 30 | 30 | 
     | 
| 31 | 
    def entry(path=nil, identifier=nil)  | 
|
| 32 | 
    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)  | 
|
| 33 | 
    scm.entry(path, patch.nil? ? nil : patch.scmid)  | 
|
| 34 | 
    end  | 
|
| 35 | 
     | 
|
| 31 | 36 | 
    def entries(path=nil, identifier=nil)  | 
| 32 | 37 | 
    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)  | 
| 33 | 38 | 
    entries = scm.entries(path, patch.nil? ? nil : patch.scmid)  | 
| ... | ... | |
| 46 | 51 | 
    entries  | 
| 47 | 52 | 
    end  | 
| 48 | 53 | 
     | 
| 54 | 
    def cat(path, identifier=nil)  | 
|
| 55 | 
    patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)  | 
|
| 56 | 
    scm.cat(path, patch.nil? ? nil : patch.scmid)  | 
|
| 57 | 
    end  | 
|
| 58 | 
     | 
|
| 49 | 59 | 
    def diff(path, rev, rev_to)  | 
| 50 | 60 | 
    patch_from = changesets.find_by_revision(rev)  | 
| 51 | 61 | 
    return nil if patch_from.nil?  |