diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index 88514439a..ce46057cc 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -33,9 +33,24 @@ module Redmine @@sq_bin ||= shell_quote(GIT_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 + 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 def info diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb index 049296d9c..52aecd929 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -15,6 +15,15 @@ begin @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH) end + def test_scm_version + to_test = { "git version 1.7.3.4\n" => [1,7,3,4], + "1.6.1\n1.7\n1.8" => [1,6,1], + "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]} + to_test.each do |s, v| + test_scm_version_for(s, v) + end + end + def test_branches assert_equal @adapter.branches, ['master', 'test_branch'] end @@ -78,6 +87,14 @@ begin last_rev.author assert_equal "2010-09-18 19:59:46".to_time, last_rev.time end + + private + + def test_scm_version_for(scm_command_version, version) + @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version) + assert_equal version, @adapter.class.scm_command_version + end + else puts "Git test repository NOT FOUND. Skipping unit tests !!!" def test_fake; assert true end