mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
466a760e18
This is a regression from a change intended to raise errors when user puts a gem under an incorrect source in the Gemfile by mistake. To fix the issue, we revert the change that caused it and implement it in a different way that restores the resolver independency from real specifications. Now it deals only with names and versions and does not try to materialize anything into real specifications before resolving. https://github.com/rubygems/rubygems/commit/d2bf1b86eb
161 lines
4 KiB
Ruby
161 lines
4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.context "when installing a bundle that includes yanked gems" do
|
|
before(:each) do
|
|
build_repo4 do
|
|
build_gem "foo", "9.0.0"
|
|
end
|
|
end
|
|
|
|
it "throws an error when the original gem version is yanked" do
|
|
lockfile <<-L
|
|
GEM
|
|
remote: #{file_uri_for(gem_repo4)}
|
|
specs:
|
|
foo (10.0.0)
|
|
|
|
PLATFORMS
|
|
#{lockfile_platforms}
|
|
|
|
DEPENDENCIES
|
|
foo (= 10.0.0)
|
|
|
|
L
|
|
|
|
install_gemfile <<-G, :raise_on_error => false
|
|
source "#{file_uri_for(gem_repo4)}"
|
|
gem "foo", "10.0.0"
|
|
G
|
|
|
|
expect(err).to include("Your bundle is locked to foo (10.0.0)")
|
|
end
|
|
|
|
it "throws the original error when only the Gemfile specifies a gem version that doesn't exist" do
|
|
bundle "config set force_ruby_platform true"
|
|
|
|
install_gemfile <<-G, :raise_on_error => false
|
|
source "#{file_uri_for(gem_repo4)}"
|
|
gem "foo", "10.0.0"
|
|
G
|
|
|
|
expect(err).not_to include("Your bundle is locked to foo (10.0.0)")
|
|
expect(err).to include("Could not find gem 'foo (= 10.0.0)' in")
|
|
end
|
|
end
|
|
|
|
RSpec.context "when resolving a bundle that includes yanked gems, but unlocking an unrelated gem" do
|
|
before(:each) do
|
|
build_repo4 do
|
|
build_gem "foo", "10.0.0"
|
|
|
|
build_gem "bar", "1.0.0"
|
|
build_gem "bar", "2.0.0"
|
|
end
|
|
|
|
lockfile <<-L
|
|
GEM
|
|
remote: #{file_uri_for(gem_repo4)}
|
|
specs:
|
|
foo (9.0.0)
|
|
bar (1.0.0)
|
|
|
|
PLATFORMS
|
|
#{lockfile_platforms}
|
|
|
|
DEPENDENCIES
|
|
foo
|
|
bar
|
|
|
|
BUNDLED WITH
|
|
#{Bundler::VERSION}
|
|
L
|
|
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo4)}"
|
|
gem "foo"
|
|
gem "bar"
|
|
G
|
|
end
|
|
|
|
it "does not update the yanked gem" do
|
|
bundle "lock --update bar"
|
|
|
|
expect(lockfile).to eq <<~L
|
|
GEM
|
|
remote: #{file_uri_for(gem_repo4)}/
|
|
specs:
|
|
bar (2.0.0)
|
|
foo (9.0.0)
|
|
|
|
PLATFORMS
|
|
#{lockfile_platforms}
|
|
|
|
DEPENDENCIES
|
|
bar
|
|
foo
|
|
|
|
BUNDLED WITH
|
|
#{Bundler::VERSION}
|
|
L
|
|
end
|
|
end
|
|
|
|
RSpec.context "when using gem before installing" do
|
|
it "does not suggest the author has yanked the gem" do
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem "rack", "0.9.1"
|
|
G
|
|
|
|
lockfile <<-L
|
|
GEM
|
|
remote: #{file_uri_for(gem_repo1)}
|
|
specs:
|
|
rack (0.9.1)
|
|
|
|
PLATFORMS
|
|
#{lockfile_platforms}
|
|
|
|
DEPENDENCIES
|
|
rack (= 0.9.1)
|
|
L
|
|
|
|
bundle :list, :raise_on_error => false
|
|
|
|
expect(err).to include("Could not find rack-0.9.1 in locally installed gems")
|
|
expect(err).to_not include("Your bundle is locked to rack (0.9.1) from")
|
|
expect(err).to_not include("If you haven't changed sources, that means the author of rack (0.9.1) has removed it.")
|
|
expect(err).to_not include("You'll need to update your bundle to a different version of rack (0.9.1) that hasn't been removed in order to install.")
|
|
end
|
|
|
|
it "does not suggest the author has yanked the gem when using more than one gem, but shows all gems that couldn't be found in the source" do
|
|
gemfile <<-G
|
|
source "#{file_uri_for(gem_repo1)}"
|
|
gem "rack", "0.9.1"
|
|
gem "rack_middleware", "1.0"
|
|
G
|
|
|
|
lockfile <<-L
|
|
GEM
|
|
remote: #{file_uri_for(gem_repo1)}
|
|
specs:
|
|
rack (0.9.1)
|
|
rack_middleware (1.0)
|
|
|
|
PLATFORMS
|
|
#{lockfile_platforms}
|
|
|
|
DEPENDENCIES
|
|
rack (= 0.9.1)
|
|
rack_middleware (1.0)
|
|
L
|
|
|
|
bundle :list, :raise_on_error => false
|
|
|
|
expect(err).to include("Could not find rack-0.9.1, rack_middleware-1.0 in locally installed gems")
|
|
expect(err).to include("Install missing gems with `bundle install`.")
|
|
expect(err).to_not include("Your bundle is locked to rack (0.9.1) from")
|
|
expect(err).to_not include("If you haven't changed sources, that means the author of rack (0.9.1) has removed it.")
|
|
expect(err).to_not include("You'll need to update your bundle to a different version of rack (0.9.1) that hasn't been removed in order to install.")
|
|
end
|
|
end
|