From 04cc2e6b9ff23405c6ad1ade43acb89049117f11 Mon Sep 17 00:00:00 2001 From: James Couball Date: Fri, 19 Aug 2022 13:09:22 -0700 Subject: [PATCH] Fix exception when Git is autoloaded Signed-off-by: James Couball --- lib/git/lib.rb | 9 +++++++ tests/all_tests.rb | 7 ++++-- .../units/test_lib_meets_required_version.rb | 24 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/units/test_lib_meets_required_version.rb diff --git a/lib/git/lib.rb b/lib/git/lib.rb index fce8b274..f2087a74 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -63,6 +63,8 @@ def initialize(base = nil, logger = nil) @git_work_dir = base[:working_directory] end @logger = logger + + Git::Lib.warn_if_old_command(self) end # creates or reinitializes the repository @@ -1027,6 +1029,13 @@ def meets_required_version? (self.current_command_version <=> self.required_command_version) >= 0 end + def self.warn_if_old_command(lib) + return true if @version_checked + unless lib.meets_required_version? + $stderr.puts "[WARNING] The git gem requires git #{lib.required_command_version.join('.')} or later, but only found #{lib.current_command_version.join('.')}. You should probably upgrade." + end + @version_checked = true + end private diff --git a/tests/all_tests.rb b/tests/all_tests.rb index 60bac481..ff3ade79 100644 --- a/tests/all_tests.rb +++ b/tests/all_tests.rb @@ -1,5 +1,8 @@ Dir.chdir(File.dirname(__FILE__)) do - Dir.glob('**/test_*.rb') do |test_case| - require "#{File.expand_path(File.dirname(__FILE__))}/#{test_case}" + Dir.glob('**/test_*.rb') do |test_case| + require "#{File.expand_path(File.dirname(__FILE__))}/#{test_case}" end end + +# To run a single test: +# require_relative 'units/test_lib_meets_required_version' diff --git a/tests/units/test_lib_meets_required_version.rb b/tests/units/test_lib_meets_required_version.rb new file mode 100644 index 00000000..fce57241 --- /dev/null +++ b/tests/units/test_lib_meets_required_version.rb @@ -0,0 +1,24 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../test_helper' + +class TestLibMeetsRequiredVersion < Test::Unit::TestCase + def test_with_supported_command_version + lib = Git::Lib.new(nil, nil) + major_version, minor_version = lib.required_command_version + lib.define_singleton_method(:current_command_version) { [major_version, minor_version] } + assert lib.meets_required_version? + end + + def test_with_old_command_version + lib = Git::Lib.new(nil, nil) + major_version, minor_version = lib.required_command_version + + # Set the major version to be returned by #current_command_version to be an + # earlier version than required + major_version = major_version - 1 + + lib.define_singleton_method(:current_command_version) { [major_version, minor_version] } + assert !lib.meets_required_version? + end +end