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? |