From: Toshi MARUYAMA Date: Tue, 15 Feb 2011 05:58:31 +0000 (+0000) Subject: scm: git: add methods of getting git version and add unit lib test (#4273). X-Git-Tag: 1.2.0~992 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4f1b1d9242284f8cd6ea7b7705fdca3c85b40222;p=redmine.git scm: git: add methods of getting git version and add unit lib test (#4273). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4829 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- 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