From 8552f7aa680e1f1a31d76dc9038d80248a445960 Mon Sep 17 00:00:00 2001 From: drbrain Date: Sun, 20 Oct 2013 00:31:12 +0000 Subject: * lib/rubygems: Update to RubyGems master 3de7e0f. Changes: Only attempt to build extensions for newly-installed gems. This prevents compilation attempts at gem activation time for gems that already have extensions built. Fix crash in the dependency resolver for dependencies that cannot be resolved. * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43368 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rubygems/test_gem_dependency_resolver.rb | 48 ++++++++++++++++------ .../test_gem_dependency_resolver_vendor_set.rb | 13 ++++++ test/rubygems/test_gem_installer.rb | 7 +++- test/rubygems/test_gem_specification.rb | 25 +++++++++++ test/rubygems/test_gem_stub_specification.rb | 1 + 5 files changed, 80 insertions(+), 14 deletions(-) (limited to 'test') diff --git a/test/rubygems/test_gem_dependency_resolver.rb b/test/rubygems/test_gem_dependency_resolver.rb index 47eef8cc55..bd349996c1 100644 --- a/test/rubygems/test_gem_dependency_resolver.rb +++ b/test/rubygems/test_gem_dependency_resolver.rb @@ -11,13 +11,17 @@ class TestGemDependencyResolver < Gem::TestCase StaticSet.new(specs) end - def assert_set(expected, actual) + def assert_resolves_to expected, resolver + actual = resolver.resolve + exp = expected.sort_by { |s| s.full_name } act = actual.map { |a| a.spec }.sort_by { |s| s.full_name } msg = "Set of gems was not the same: #{exp.map { |x| x.full_name}.inspect} != #{act.map { |x| x.full_name}.inspect}" assert_equal exp, act, msg + rescue Gem::DependencyResolutionError => e + flunk "#{e.message}\n#{e.conflict.explanation}" end def test_no_overlap_specificly @@ -33,7 +37,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new(deps, s) - assert_set [a, b], res.resolve + assert_resolves_to [a, b], res end def test_pulls_in_dependencies @@ -50,7 +54,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new(deps, s) - assert_set [a, b, c], res.resolve + assert_resolves_to [a, b, c], res end def test_picks_highest_version @@ -63,7 +67,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new([ad], s) - assert_set [a2], res.resolve + assert_resolves_to [a2], res end def test_picks_best_platform @@ -89,7 +93,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new([ad], s) - assert_set [a2_p1], res.resolve + assert_resolves_to [a2_p1], res end def test_only_returns_spec_once @@ -105,7 +109,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new([ad, bd], s) - assert_set [a1, b1, c1], res.resolve + assert_resolves_to [a1, b1, c1], res end def test_picks_lower_version_when_needed @@ -122,7 +126,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new([ad, bd], s) - assert_set [a1, b1, c1], res.resolve + assert_resolves_to [a1, b1, c1], res cons = res.conflicts @@ -150,7 +154,7 @@ class TestGemDependencyResolver < Gem::TestCase res = Gem::DependencyResolver.new([ad, bd], s) - assert_set [a1, b1, c1, d4], res.resolve + assert_resolves_to [a1, b1, c1, d4], res cons = res.conflicts @@ -266,7 +270,7 @@ class TestGemDependencyResolver < Gem::TestCase r = Gem::DependencyResolver.new([ad, bd], s) - assert_set [a1, b1, c1], r.resolve + assert_resolves_to [a1, b1, c1], r end def test_common_rack_activation_scenario @@ -285,13 +289,13 @@ class TestGemDependencyResolver < Gem::TestCase r = Gem::DependencyResolver.new([d1, d2], s) - assert_set [rails, ap, rack101, lib1], r.resolve + assert_resolves_to [rails, ap, rack101, lib1], r # check it with the deps reverse too r = Gem::DependencyResolver.new([d2, d1], s) - assert_set [lib1, rack101, rails, ap], r.resolve + assert_resolves_to [lib1, rack101, rails, ap], r end def test_backtracks_to_the_first_conflict @@ -313,6 +317,24 @@ class TestGemDependencyResolver < Gem::TestCase end end + def test_resolve_conflict + a1 = util_spec 'a', 1 + a2 = util_spec 'a', 2 + + b2 = util_spec 'b', 2, 'a' => '~> 2.0' + + s = set a1, a2, b2 + + a_dep = dep 'a', '~> 1.0' + b_dep = dep 'b' + + r = Gem::DependencyResolver.new [a_dep, b_dep], s + + assert_raises Gem::DependencyResolutionError do + r.resolve + end + end + # actionmailer 2.3.4 # activemerchant 1.5.0 # activesupport 2.3.5, 2.3.4 @@ -333,7 +355,7 @@ class TestGemDependencyResolver < Gem::TestCase r = Gem::DependencyResolver.new([d1, d2], s) - assert_set [merch, mail, sup1], r.resolve + assert_resolves_to [merch, mail, sup1], r end def test_second_level_backout @@ -351,7 +373,7 @@ class TestGemDependencyResolver < Gem::TestCase r = Gem::DependencyResolver.new([p1, p2], s) - assert_set [b1, c1, d2], r.resolve + assert_resolves_to [b1, c1, d2], r end def test_select_local_platforms diff --git a/test/rubygems/test_gem_dependency_resolver_vendor_set.rb b/test/rubygems/test_gem_dependency_resolver_vendor_set.rb index 44b7413865..b925ff3f47 100644 --- a/test/rubygems/test_gem_dependency_resolver_vendor_set.rb +++ b/test/rubygems/test_gem_dependency_resolver_vendor_set.rb @@ -19,6 +19,19 @@ class TestGemDependencyResolverVendorSet < Gem::TestCase assert_equal "#{name}-#{version}", spec.full_name end + def test_add_vendor_gem_missing + name, version, directory = vendor_gem + + FileUtils.rm_r directory + + e = assert_raises Gem::GemNotFoundException do + @set.add_vendor_gem name, directory + end + + assert_equal "unable to find #{directory}/#{name}.gemspec for gem #{name}", + e.message + end + def test_find_all name, version, directory = vendor_gem diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 01b151c089..7ce00f0121 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -1346,7 +1346,12 @@ gem 'other', version @installer.write_spec assert_path_exists @spec.spec_file - assert_equal @spec, eval(File.read(@spec.spec_file)) + + loaded = Gem::Specification.load @spec.spec_file + + assert_equal @spec, loaded + + assert_equal Gem.rubygems_version, @spec.installed_by_version end def test_write_spec_writes_cached_spec diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index d893a7191e..0623e8d51d 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -67,6 +67,7 @@ end s.mark_version s.files = %w[lib/code.rb] + s.installed_by_version = v('2.2') end end @@ -1221,6 +1222,19 @@ dependencies: [] refute_path_exists @a1.extension_install_dir end + def test_build_extensions_old + ext_spec + + refute_empty @ext.extensions, 'sanity check' + + @ext.installed_by_version = v(0) + + @ext.build_extensions + + gem_make_out = File.join @ext.extension_install_dir, 'gem_make.out' + refute_path_exists gem_make_out + end + def test_contains_requirable_file_eh code_rb = File.join @a1.gem_dir, 'lib', 'code.rb' FileUtils.mkdir_p File.dirname code_rb @@ -1544,6 +1558,14 @@ dependencies: [] refute_equal @a1.hash, @a2.hash end + def test_installed_by_version + assert_equal v(0), @a1.installed_by_version + + @a1.installed_by_version = Gem.rubygems_version + + assert_equal Gem.rubygems_version, @a1.installed_by_version + end + def test_base_dir assert_equal @gemhome, @a1.base_dir end @@ -1841,6 +1863,7 @@ end @a2.add_runtime_dependency 'b', '1' @a2.dependencies.first.instance_variable_set :@type, nil @a2.required_rubygems_version = Gem::Requirement.new '> 0' + @a2.installed_by_version = Gem.rubygems_version # cached specs do not have spec.files populated: ruby_code = @a2.to_ruby_for_cache @@ -1863,6 +1886,8 @@ Gem::Specification.new do |s| s.rubygems_version = "#{Gem::VERSION}" s.summary = "this is a summary" + s.installed_by_version = "#{Gem::VERSION}" + if s.respond_to? :specification_version then s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION} diff --git a/test/rubygems/test_gem_stub_specification.rb b/test/rubygems/test_gem_stub_specification.rb index 8f9cadbcf3..1c200ec1ed 100644 --- a/test/rubygems/test_gem_stub_specification.rb +++ b/test/rubygems/test_gem_stub_specification.rb @@ -104,6 +104,7 @@ Gem::Specification.new do |s| s.name = 'stub_e' s.version = Gem::Version.new '2' s.extensions = ['ext/stub_e/extconf.rb'] + s.installed_by_version = '2.2' end STUB -- cgit v1.2.3