diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb index 74d74960e207..59d44bf8a9a1 100644 --- a/lib/rubygems/commands/install_command.rb +++ b/lib/rubygems/commands/install_command.rb @@ -216,10 +216,9 @@ def install_gem name, version # :nodoc: install_gem_without_dependencies name, req else inst = Gem::DependencyInstaller.new options + request_set = inst.resolve_dependencies name, req if options[:explain] - request_set = inst.resolve_dependencies name, req - puts "Gems to install:" request_set.sorted_requests.each do |s| @@ -228,11 +227,9 @@ def install_gem name, version # :nodoc: return else - inst.install name, req + @installed_specs.concat request_set.install options end - @installed_specs.push(*inst.installed_gems) - show_install_errors inst.errors end end diff --git a/lib/rubygems/request_set.rb b/lib/rubygems/request_set.rb index a3b3b79a1293..7cd424a90bdd 100644 --- a/lib/rubygems/request_set.rb +++ b/lib/rubygems/request_set.rb @@ -130,7 +130,8 @@ def import deps def install options, &block # :yields: request, installer if dir = options[:install_dir] - return install_into dir, false, options, &block + specs = install_into dir, false, options, &block + return specs end cache_dir = options[:cache_dir] || Gem.dir @@ -157,6 +158,17 @@ def install options, &block # :yields: request, installer end specs + ensure + raise if $! + return specs if options[:gemdeps] + + require 'rubygems/dependency_installer' + inst = Gem::DependencyInstaller.new options + inst.installed_gems.replace specs + + Gem.done_installing_hooks.each do |hook| + hook.call inst, specs + end unless Gem.done_installing_hooks.empty? end ## diff --git a/test/rubygems/test_gem_dependency_installer.rb b/test/rubygems/test_gem_dependency_installer.rb index e57ccb6c0002..96da45e9d3b3 100644 --- a/test/rubygems/test_gem_dependency_installer.rb +++ b/test/rubygems/test_gem_dependency_installer.rb @@ -293,7 +293,7 @@ def test_install_dependency Gem.done_installing do |installer, specs| done_installing_ran = true - assert_equal inst, installer + refute_nil installer assert_equal [@a1, @b1], specs end diff --git a/test/rubygems/test_gem_request_set.rb b/test/rubygems/test_gem_request_set.rb index 025023e4867e..ac0a1b331669 100644 --- a/test/rubygems/test_gem_request_set.rb +++ b/test/rubygems/test_gem_request_set.rb @@ -42,6 +42,12 @@ def test_install_from_gemdeps fetcher.gem 'a', 2 end + done_installing_ran = false + + Gem.done_installing do |installer, specs| + done_installing_ran = true + end + rs = Gem::RequestSet.new installed = [] @@ -61,6 +67,7 @@ def test_install_from_gemdeps assert_path_exists 'gem.deps.rb.lock' assert rs.remote + refute done_installing_ran end def test_install_from_gemdeps_install_dir @@ -335,6 +342,12 @@ def test_sorted_requests end def test_install + done_installing_ran = false + + Gem.done_installing do + done_installing_ran = true + end + spec_fetcher do |fetcher| fetcher.gem "a", "1", "b" => "= 1" fetcher.gem "b", "1" @@ -363,6 +376,8 @@ def test_install assert_path_exists File.join @gemhome, 'specifications', 'b-1.gemspec' assert_equal %w[b-1 a-1], installed.map { |s| s.full_name } + + assert done_installing_ran end def test_install_into