Skip to content

Commit 04cc2e6

Browse files
committed
Fix exception when Git is autoloaded
Signed-off-by: James Couball <jcouball@yahoo.com>
1 parent e58cd29 commit 04cc2e6

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

lib/git/lib.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ def initialize(base = nil, logger = nil)
6363
@git_work_dir = base[:working_directory]
6464
end
6565
@logger = logger
66+
67+
Git::Lib.warn_if_old_command(self)
6668
end
6769

6870
# creates or reinitializes the repository
@@ -1027,6 +1029,13 @@ def meets_required_version?
10271029
(self.current_command_version <=> self.required_command_version) >= 0
10281030
end
10291031

1032+
def self.warn_if_old_command(lib)
1033+
return true if @version_checked
1034+
unless lib.meets_required_version?
1035+
$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."
1036+
end
1037+
@version_checked = true
1038+
end
10301039

10311040
private
10321041

tests/all_tests.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
Dir.chdir(File.dirname(__FILE__)) do
2-
Dir.glob('**/test_*.rb') do |test_case|
3-
require "#{File.expand_path(File.dirname(__FILE__))}/#{test_case}"
2+
Dir.glob('**/test_*.rb') do |test_case|
3+
require "#{File.expand_path(File.dirname(__FILE__))}/#{test_case}"
44
end
55
end
6+
7+
# To run a single test:
8+
# require_relative 'units/test_lib_meets_required_version'
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env ruby
2+
3+
require File.dirname(__FILE__) + '/../test_helper'
4+
5+
class TestLibMeetsRequiredVersion < Test::Unit::TestCase
6+
def test_with_supported_command_version
7+
lib = Git::Lib.new(nil, nil)
8+
major_version, minor_version = lib.required_command_version
9+
lib.define_singleton_method(:current_command_version) { [major_version, minor_version] }
10+
assert lib.meets_required_version?
11+
end
12+
13+
def test_with_old_command_version
14+
lib = Git::Lib.new(nil, nil)
15+
major_version, minor_version = lib.required_command_version
16+
17+
# Set the major version to be returned by #current_command_version to be an
18+
# earlier version than required
19+
major_version = major_version - 1
20+
21+
lib.define_singleton_method(:current_command_version) { [major_version, minor_version] }
22+
assert !lib.meets_required_version?
23+
end
24+
end

0 commit comments

Comments
 (0)