1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[rubygems/rubygems] Remove gem install hint when installing a gem fails

A fresh `gem install` might not reproduce the exact `bundle install`
environment that originally caused the error. It also makes it harder
for the user to troubleshoot the error since she needs to run a separate
command.

Instead, show the original error and backtrace directly.

https://github.com/rubygems/rubygems/commit/49c2abfec6
This commit is contained in:
David Rodríguez 2021-07-23 15:53:59 +02:00 committed by Hiroshi SHIBATA
parent 6eb6f740f2
commit 6bcedabfdd
No known key found for this signature in database
GPG key ID: F9CF13417264FAC2
3 changed files with 4 additions and 109 deletions

View file

@ -37,25 +37,13 @@ module Bundler
end
def failure_message
return install_error_message if spec.source.options["git"]
"#{install_error_message}\n#{gem_install_message}"
install_error_message
end
def install_error_message
"An error occurred while installing #{spec.name} (#{spec.version}), and Bundler cannot continue."
end
def gem_install_message
source = spec.source
return unless source.respond_to?(:remotes)
if source.remotes.size == 1
"Make sure that `gem install #{spec.name} -v '#{spec.version}' --source '#{source.remotes.first}'` succeeds before bundling."
else
"Make sure that `gem install #{spec.name} -v '#{spec.version}'` succeeds before bundling."
end
end
def spec_settings
# Fetch the build settings, if there are any
if settings = Bundler.settings["build.#{spec.name}"]

View file

@ -448,7 +448,7 @@ RSpec.describe "bundle install with gem sources" do
expect(last_command.stdboth).not_to match(/Error Report/i)
expect(err).to include("An error occurred while installing ajp-rails (0.0.0), and Bundler cannot continue.").
and include("Make sure that `gem install ajp-rails -v '0.0.0' --source '#{file_uri_for(gem_repo2)}/'` succeeds before bundling.")
and include("Bundler::APIResponseInvalidDependenciesError")
end
it "doesn't blow up when the local .bundle/config is empty" do

View file

@ -2,7 +2,7 @@
RSpec.describe "bundle install" do
context "installing a gem fails" do
it "prints out why that gem was being installed" do
it "prints out why that gem was being installed and the underlying error" do
build_repo2 do
build_gem "activesupport", "2.3.2" do |s|
s.extensions << "Rakefile"
@ -18,102 +18,9 @@ RSpec.describe "bundle install" do
source "#{file_uri_for(gem_repo2)}"
gem "rails"
G
expect(err).to start_with("Gem::Ext::BuildError: ERROR: Failed to build gem native extension.")
expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
Make sure that `gem install activesupport -v '2.3.2' --source '#{file_uri_for(gem_repo2)}/'` succeeds before bundling.
In Gemfile:
rails was resolved to 2.3.2, which depends on
actionmailer was resolved to 2.3.2, which depends on
activesupport
M
end
context "when installing a git gem" do
it "does not tell the user to run 'gem install'" do
build_git "activesupport", "2.3.2", :path => lib_path("activesupport") do |s|
s.extensions << "Rakefile"
s.write "Rakefile", <<-RUBY
task :default do
abort "make installing activesupport-2.3.2 fail"
end
RUBY
end
install_gemfile <<-G, :raise_on_error => false
source "#{file_uri_for(gem_repo1)}"
gem "rails"
gem "activesupport", :git => "#{lib_path("activesupport")}"
G
expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
In Gemfile:
rails was resolved to 2.3.2, which depends on
actionmailer was resolved to 2.3.2, which depends on
activesupport
M
end
end
context "when installing a gem using a git block" do
it "does not tell the user to run 'gem install'" do
build_git "activesupport", "2.3.2", :path => lib_path("activesupport") do |s|
s.extensions << "Rakefile"
s.write "Rakefile", <<-RUBY
task :default do
abort "make installing activesupport-2.3.2 fail"
end
RUBY
end
install_gemfile <<-G, :raise_on_error => false
source "#{file_uri_for(gem_repo1)}"
gem "rails"
git "#{lib_path("activesupport")}" do
gem "activesupport"
end
G
expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
In Gemfile:
rails was resolved to 2.3.2, which depends on
actionmailer was resolved to 2.3.2, which depends on
activesupport
M
end
end
it "prints out the hint for the remote source when available" do
build_repo2 do
build_gem "activesupport", "2.3.2" do |s|
s.extensions << "Rakefile"
s.write "Rakefile", <<-RUBY
task :default do
abort "make installing activesupport-2.3.2 fail"
end
RUBY
end
end
build_repo4 do
build_gem "a"
end
install_gemfile <<-G, :raise_on_error => false
source "#{file_uri_for(gem_repo4)}"
source "#{file_uri_for(gem_repo2)}" do
gem "rails"
end
G
expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
Make sure that `gem install activesupport -v '2.3.2' --source '#{file_uri_for(gem_repo2)}/'` succeeds before bundling.
In Gemfile:
rails was resolved to 2.3.2, which depends on