diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 35e165ff6a..121b72f90a 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1415,13 +1415,11 @@ class Gem::Specification < Gem::BasicSpecification raise e end - begin - specs = spec_dep.to_specs.uniq(&:full_name) - rescue Gem::MissingSpecError => e - raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}") - end + specs = spec_dep.matching_specs(true).uniq(&:full_name) - if specs.size == 1 + if specs.size == 0 + raise Gem::MissingSpecError.new(spec_dep.name, spec_dep.requirement, "at: #{spec_file}") + elsif specs.size == 1 specs.first.activate else name = spec_dep.name diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 8b229a1736..697a26338c 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -652,6 +652,17 @@ end end end + def test_self_activate_missing_deps_does_not_raise_nested_exceptions + a = util_spec "a", "1.0", "b" => ">= 1.0" + install_specs a + + e = assert_raise Gem::MissingSpecError do + a.activate + end + + refute e.cause + end + def test_self_all_equals a = util_spec "foo", "1", nil, "lib/foo.rb"