Mercurial > hg > soundsoftware-site
diff lib/redmine/scm/adapters/bazaar_adapter.rb @ 245:051f544170fe
* Update to SVN trunk revision 4993
author | Chris Cannam |
---|---|
date | Thu, 03 Mar 2011 11:42:28 +0000 |
parents | 0579821a129a |
children | cbce1fd3b1b7 |
line wrap: on
line diff
--- a/lib/redmine/scm/adapters/bazaar_adapter.rb Thu Mar 03 11:40:10 2011 +0000 +++ b/lib/redmine/scm/adapters/bazaar_adapter.rb Thu Mar 03 11:42:28 2011 +0000 @@ -19,15 +19,47 @@ module Redmine module Scm - module Adapters + module Adapters class BazaarAdapter < AbstractAdapter - + # Bazaar executable name BZR_BIN = Redmine::Configuration['scm_bazaar_command'] || "bzr" - + + class << self + def client_command + @@bin ||= BZR_BIN + end + + def sq_bin + @@sq_bin ||= shell_quote(BZR_BIN) + end + + def client_version + @@client_version ||= (scm_command_version || []) + end + + def client_available + !client_version.empty? + end + + def scm_command_version + scm_version = scm_version_from_command_line.dup + if scm_version.respond_to?(:force_encoding) + scm_version.force_encoding('ASCII-8BIT') + end + if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}) + m[2].scan(%r{\d+}).collect(&:to_i) + end + end + + def scm_version_from_command_line + shellout("#{sq_bin} --version") { |io| io.read }.to_s + end + end + # Get info about the repository def info - cmd = "#{BZR_BIN} revno #{target('')}" + cmd = "#{self.class.sq_bin} revno #{target('')}" info = nil shellout(cmd) do |io| if io.read =~ %r{^(\d+)\r?$} @@ -43,13 +75,13 @@ rescue CommandFailed return nil end - + # Returns an Entries collection # or nil if the given path doesn't exist in the repository def entries(path=nil, identifier=nil) path ||= '' entries = Entries.new - cmd = "#{BZR_BIN} ls -v --show-ids" + cmd = "#{self.class.sq_bin} ls -v --show-ids" identifier = -1 unless identifier && identifier.to_i > 0 cmd << " -r#{identifier.to_i}" cmd << " #{target(path)}" @@ -71,13 +103,13 @@ logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug? entries.sort_by_name end - + def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}) path ||= '' identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : 'last:1' identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1 revisions = Revisions.new - cmd = "#{BZR_BIN} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}" + cmd = "#{self.class.sq_bin} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}" shellout(cmd) do |io| revision = nil parsing = nil @@ -132,7 +164,7 @@ return nil if $? && $?.exitstatus != 0 revisions end - + def diff(path, identifier_from, identifier_to=nil) path ||= '' if identifier_to @@ -143,7 +175,7 @@ if identifier_from identifier_from = identifier_from.to_i end - cmd = "#{BZR_BIN} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" + cmd = "#{self.class.sq_bin} diff -r#{identifier_to}..#{identifier_from} #{target(path)}" diff = [] shellout(cmd) do |io| io.each_line do |line| @@ -153,9 +185,9 @@ #return nil if $? && $?.exitstatus != 0 diff end - + def cat(path, identifier=nil) - cmd = "#{BZR_BIN} cat" + cmd = "#{self.class.sq_bin} cat" cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0 cmd << " #{target(path)}" cat = nil @@ -166,9 +198,9 @@ return nil if $? && $?.exitstatus != 0 cat end - + def annotate(path, identifier=nil) - cmd = "#{BZR_BIN} annotate --all" + cmd = "#{self.class.sq_bin} annotate --all" cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0 cmd << " #{target(path)}" blame = Annotate.new