[rubygems/rubygems] Fix error message on metadata mismatches

Previously we were removing not installable specs. However, if those are
the only ones, that would result in a bad error message. If we still
choose them as a last resort, Bundler will later check metadata right
before installing a give a proper error.

This is a regression of https://github.com/rubygems/rubygems/commit/565549260be5 and the
fix is to revert that commit.

https://github.com/rubygems/rubygems/commit/bc18912257
This commit is contained in:
David Rodríguez 2022-04-06 09:22:49 +02:00 коммит произвёл git
Родитель c582d9862a
Коммит 8f1a8e68ba
3 изменённых файлов: 42 добавлений и 1 удалений

Просмотреть файл

@ -94,7 +94,7 @@ module Bundler
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
end
search = installable_candidates.last
search = installable_candidates.last || same_platform_candidates.last
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
search
end

Просмотреть файл

@ -245,6 +245,43 @@ RSpec.describe "bundle install with install-time dependencies" do
expect(the_bundle).to include_gems("rack 1.2")
end
it "gives a meaningful error if there's a lockfile using the newer incompatible version" do
build_repo2 do
build_gem "parallel_tests", "3.7.0" do |s|
s.required_ruby_version = ">= #{current_ruby_minor}"
end
build_gem "parallel_tests", "3.8.0" do |s|
s.required_ruby_version = ">= #{next_ruby_minor}"
end
end
gemfile <<-G
source "http://localgemserver.test/"
gem 'parallel_tests'
G
lockfile <<~L
GEM
remote: http://localgemserver.test/
specs:
parallel_tests (3.8.0)
PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
parallel_tests
BUNDLED WITH
#{Bundler::VERSION}
L
bundle "install --verbose", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo2.to_s }, :raise_on_error => false
expect(err).to include("parallel_tests-3.8.0 requires ruby version >= #{next_ruby_minor}")
expect(err).not_to include("That means the author of parallel_tests (3.8.0) has removed it.")
end
it "installs the older version under rate limiting conditions" do
build_repo4 do
build_gem "rack", "9001.0.0" do |s|

Просмотреть файл

@ -471,6 +471,10 @@ module Spec
end
end
def current_ruby_minor
Gem.ruby_version.segments[0..1].join(".")
end
def next_ruby_minor
Gem.ruby_version.segments[0..1].map.with_index {|s, i| i == 1 ? s + 1 : s }.join(".")
end