Class: Redmine::Scm::Adapters::DarcsAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- Redmine::Scm::Adapters::DarcsAdapter
- Defined in:
- lib/redmine/scm/adapters/darcs_adapter.rb
Constant Summary
- DARCS_BIN =
Darcs executable name
"darcs"
Class Method Summary
Instance Method Summary
- - (Object) cat(path, identifier = nil)
- - (Object) diff(path, identifier_from, identifier_to = nil)
-
- (Object) entries(path = nil, identifier = nil)
Returns an Entries collection or nil if the given path doesn’t exist in the repository.
-
- (Object) info
Get info about the darcs repository.
-
- (DarcsAdapter) initialize(url, root_url = nil, login = nil, password = nil)
constructor
A new instance of DarcsAdapter.
- - (Object) revisions(path = nil, identifier_from = nil, identifier_to = nil, options = {})
- - (Boolean) supports_cat?
Methods inherited from AbstractAdapter
#adapter_name, #branches, client_version_above?, client_version_string, #default_branch, #entry, #properties, #root_url, #shell_quote, #supports_annotate?, #tags, #url, #with_leading_slash, #with_trailling_slash, #without_leading_slash, #without_trailling_slash
Constructor Details
- (DarcsAdapter) initialize(url, root_url = nil, login = nil, password = nil)
A new instance of DarcsAdapter
47 48 49 50 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 47 def initialize(url, root_url=nil, login=nil, password=nil) @url = url @root_url = url end |
Class Method Details
+ (Object) client_version
29 30 31 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 29 def client_version @@client_version ||= (darcs_binary_version || []) end |
+ (Object) darcs_binary_version
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 33 def darcs_binary_version cmd = "#{DARCS_BIN} --version" 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(&:to_i) end end return nil if $? && $?.exitstatus != 0 version end |
Instance Method Details
- (Object) cat(path, identifier = nil)
137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 137 def cat(path, identifier=nil) cmd = "#{DARCS_BIN} show content --repodir #{@url}" cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier cmd << " #{shell_quote path}" cat = nil shellout(cmd) do |io| io.binmode cat = io.read end return nil if $? && $?.exitstatus != 0 cat end |
- (Object) diff(path, identifier_from, identifier_to = nil)
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 117 def diff(path, identifier_from, identifier_to=nil) path = '*' if path.blank? cmd = "#{DARCS_BIN} diff --repodir #{@url}" if identifier_to.nil? cmd << " --match #{shell_quote("hash #{identifier_from}")}" else cmd << " --to-match #{shell_quote("hash #{identifier_from}")}" cmd << " --from-match #{shell_quote("hash #{identifier_to}")}" end cmd << " -u #{shell_quote path}" diff = [] shellout(cmd) do |io| io.each_line do |line| diff << line end end return nil if $? && $?.exitstatus != 0 diff end |
- (Object) entries(path = nil, identifier = nil)
Returns an Entries collection or nil if the given path doesn’t exist in the repository
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 65 def entries(path=nil, identifier=nil) path_prefix = (path.blank? ? '' : "#{path}/") path = '.' if path.blank? entries = Entries.new cmd = "#{DARCS_BIN} annotate --repodir #{@url} --xml-output" cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier cmd << " #{shell_quote path}" shellout(cmd) do |io| begin doc = REXML::Document.new(io) if doc.root.name == 'directory' doc.elements.each('directory/*') do |element| next unless ['file', 'directory'].include? element.name entries << entry_from_xml(element, path_prefix) end elsif doc.root.name == 'file' entries << entry_from_xml(doc.root, path_prefix) end rescue end end return nil if $? && $?.exitstatus != 0 entries.compact.sort_by_name end |
- (Object) info
Get info about the darcs repository
58 59 60 61 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 58 def info rev = revisions(nil,nil,nil,{:limit => 1}) rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil end |
- (Object) revisions(path = nil, identifier_from = nil, identifier_to = nil, options = {})
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 90 def revisions(path=nil, identifier_from=nil, identifier_to=nil, ={}) path = '.' if path.blank? revisions = Revisions.new cmd = "#{DARCS_BIN} changes --repodir #{@url} --xml-output" cmd << " --from-match #{shell_quote("hash #{identifier_from}")}" if identifier_from cmd << " --last #{options[:limit].to_i}" if [:limit] shellout(cmd) do |io| begin doc = REXML::Document.new(io) doc.elements.each("changelog/patch") do |patch| = patch.elements['name'].text << "\n" + patch.elements['comment'].text.gsub(/\*\*\*END OF DESCRIPTION\*\*\*.*\z/m, '') if patch.elements['comment'] revisions << Revision.new({:identifier => nil, :author => patch.attributes['author'], :scmid => patch.attributes['hash'], :time => Time.parse(patch.attributes['local_date']), :message => , :paths => ([:with_path] ? get_paths_for_patch(patch.attributes['hash']) : nil) }) end rescue end end return nil if $? && $?.exitstatus != 0 revisions end |
- (Boolean) supports_cat?
52 53 54 55 |
# File 'lib/redmine/scm/adapters/darcs_adapter.rb', line 52 def supports_cat? # cat supported in darcs 2.0.0 and higher self.class.client_version_above?([2, 0, 0]) end |