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 »