Bug #19576 » 0001-Backport-Fix-another-issue-of-Bundler-not-falling-back.patch
| bundler/lib/bundler/lazy_specification.rb | ||
|---|---|---|
|
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
||
|
specification = __materialize__(installable_candidates)
|
||
|
specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
|
||
|
return specification unless specification.nil?
|
||
|
if target_platform != platform
|
||
| ... | ... | |
|
__materialize__(candidates)
|
||
|
end
|
||
|
def __materialize__(candidates)
|
||
|
# If in frozen mode, we fallback to a non-installable candidate because by
|
||
|
# doing this we avoid re-resolving and potentially end up changing the
|
||
|
# lock file, which is not allowed. In that case, we will give a proper error
|
||
|
# about the mismatch higher up the stack, right before trying to install the
|
||
|
# bad gem.
|
||
|
def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
||
|
search = candidates.reverse.find do |spec|
|
||
|
spec.is_a?(StubSpecification) ||
|
||
|
(spec.matches_current_ruby? &&
|
||
|
spec.matches_current_rubygems?)
|
||
|
end
|
||
|
if search.nil? && Bundler.frozen_bundle?
|
||
|
if search.nil? && fallback_to_non_installable
|
||
|
search = candidates.last
|
||
|
else
|
||
|
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
||
| bundler/spec/install/gemfile/specific_platform_spec.rb | ||
|---|---|---|
|
L
|
||
|
end
|
||
|
it "still installs the generic RUBY variant if necessary even when running on a legacy lockfile locked only to RUBY" do
|
||
|
build_repo4 do
|
||
|
build_gem "nokogiri", "1.3.10"
|
||
|
build_gem "nokogiri", "1.3.10" do |s|
|
||
|
s.platform = "arm64-darwin"
|
||
|
s.required_ruby_version = "< #{Gem.ruby_version}"
|
||
|
context "when running on a legacy lockfile locked only to RUBY" do
|
||
|
around do |example|
|
||
|
build_repo4 do
|
||
|
build_gem "nokogiri", "1.3.10"
|
||
|
build_gem "nokogiri", "1.3.10" do |s|
|
||
|
s.platform = "arm64-darwin"
|
||
|
s.required_ruby_version = "< #{Gem.ruby_version}"
|
||
|
end
|
||
|
build_gem "bundler", "2.1.4"
|
||
|
end
|
||
|
build_gem "bundler", "2.1.4"
|
||
|
end
|
||
|
gemfile <<~G
|
||
|
gemfile <<~G
|
||
|
source "#{file_uri_for(gem_repo4)}"
|
||
|
gem "nokogiri"
|
||
|
G
|
||
|
G
|
||
|
lockfile <<-L
|
||
|
lockfile <<-L
|
||
|
GEM
|
||
|
remote: #{file_uri_for(gem_repo4)}/
|
||
|
specs:
|
||
|
nokogiri (1.3.10)
|
||
|
PLATFORMS
|
||
|
ruby
|
||
|
DEPENDENCIES
|
||
|
nokogiri
|
||
|
RUBY VERSION
|
||
|
2.5.3p105
|
||
|
BUNDLED WITH
|
||
|
2.1.4
|
||
|
L
|
||
|
L
|
||
|
simulate_platform "arm64-darwin-22" do
|
||
|
simulate_platform "arm64-darwin-22", &example
|
||
|
end
|
||
|
it "still installs the generic RUBY variant if necessary" do
|
||
|
bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s }
|
||
|
end
|
||
|
it "still installs the generic RUBY variant if necessary, even in frozen mode" do
|
||
|
bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s, "BUNDLE_FROZEN" => "true" }
|
||
|
end
|
||
|
end
|
||
|
it "doesn't discard previously installed platform specific gem and fall back to ruby on subsequent bundles" do
|
||
- « Previous
- 1
- 2
- 3
- Next »