diff --git a/README.md b/README.md index bc82b9e0..1da26a32 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,9 @@ Git env config # If you need to use a custom SSH script config.git_ssh = '/path/to/ssh/script' + + # If you need to ignore SSL verification + config.git_ssl_no_verify = true end ``` diff --git a/lib/git/config.rb b/lib/git/config.rb index a4a90e51..825f0c52 100644 --- a/lib/git/config.rb +++ b/lib/git/config.rb @@ -2,11 +2,12 @@ module Git class Config - attr_writer :binary_path, :git_ssh + attr_writer :binary_path, :git_ssh, :git_ssl_no_verify def initialize @binary_path = nil @git_ssh = nil + @git_ssl_no_verify = nil end def binary_path @@ -17,6 +18,11 @@ def git_ssh @git_ssh || ENV['GIT_SSH'] end + def git_ssl_no_verify + return 'true' if @git_ssl_no_verify + ENV['GIT_SSL_NO_VERIFY'] + end + end end diff --git a/lib/git/lib.rb b/lib/git/lib.rb index a698cf3e..99d979c4 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -897,7 +897,7 @@ def meets_required_version? # Systen ENV variables involved in the git commands. # # @return [] the names of the EVN variables involved in the git commands - ENV_VARIABLE_NAMES = ['GIT_DIR', 'GIT_WORK_TREE', 'GIT_INDEX_FILE', 'GIT_SSH'] + ENV_VARIABLE_NAMES = %w(GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_SSH GIT_SSL_NO_VERIFY) def command_lines(cmd, opts = [], chdir = true, redirect = '') cmd_op = command(cmd, opts, chdir) @@ -933,6 +933,7 @@ def set_custom_git_env_variables ENV['GIT_WORK_TREE'] = @git_work_dir ENV['GIT_INDEX_FILE'] = @git_index_file ENV['GIT_SSH'] = Git::Base.config.git_ssh + ENV['GIT_SSL_NO_VERIFY'] = Git::Base.config.git_ssl_no_verify end # Runs a block inside an environment with customized ENV variables. diff --git a/tests/units/test_config.rb b/tests/units/test_config.rb index 7721ba24..f595a0d2 100644 --- a/tests/units/test_config.rb +++ b/tests/units/test_config.rb @@ -39,9 +39,11 @@ def test_env_config Git.configure do |config| config.binary_path = '/usr/bin/git' config.git_ssh = '/path/to/ssh/script' + config.git_ssl_no_verify = true end assert_equal(Git::Base.config.git_ssh, '/path/to/ssh/script') + assert_equal(Git::Base.config.git_ssl_no_verify, 'true') @git.log ensure @@ -50,6 +52,7 @@ def test_env_config Git.configure do |config| config.binary_path = nil config.git_ssh = nil + config.git_ssl_no_verify = nil end end end diff --git a/tests/units/test_lib.rb b/tests/units/test_lib.rb index 8796dc88..fdb886d9 100644 --- a/tests/units/test_lib.rb +++ b/tests/units/test_lib.rb @@ -81,12 +81,14 @@ def test_environment_reset ENV['GIT_DIR'] = '/my/git/dir' ENV['GIT_WORK_TREE'] = '/my/work/tree' ENV['GIT_INDEX_FILE'] = 'my_index' + ENV['GIT_SSL_NO_VERIFY'] = 'true' @lib.log_commits :count => 10 assert_equal(ENV['GIT_DIR'], '/my/git/dir') assert_equal(ENV['GIT_WORK_TREE'], '/my/work/tree') assert_equal(ENV['GIT_INDEX_FILE'],'my_index') + assert_equal(ENV['GIT_SSL_NO_VERIFY'], 'true') end end @@ -115,6 +117,22 @@ def test_git_ssh_from_environment_is_passed_to_binary end end + def test_git_ssl_no_verify + with_custom_env_variables do + begin + ENV['GIT_SSL_NO_VERIFY'] = 'false' + assert_equal(Git::Base.config.git_ssl_no_verify, 'false') + + Git::Base.config.git_ssl_no_verify = true + assert_equal(Git::Base.config.git_ssl_no_verify, 'true') + ensure + Git.configure do |config| + config.git_ssl_no_verify = nil + end + end + end + end + def test_revparse assert_equal('1cc8667014381e2788a94777532a788307f38d26', @lib.revparse('1cc8667014381')) # commit assert_equal('94c827875e2cadb8bc8d4cdd900f19aa9e8634c7', @lib.revparse('1cc8667014381^{tree}')) #tree