mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
[rubygems/rubygems] Materializing specs for vendor/cache should not be strict
Platforms specific gems not compatible with the current Ruby should not
make `bundle cache` fail and should not get removed from the cache since
they still may be useful in other rubies.
717b43f565
This commit is contained in:
parent
5adbad731b
commit
e7720ef8d7
2 changed files with 51 additions and 8 deletions
|
@ -124,7 +124,7 @@ module Bundler
|
||||||
def materialize_for_cache
|
def materialize_for_cache
|
||||||
source.remote!
|
source.remote!
|
||||||
|
|
||||||
materialize_strictly
|
materialize(self, &:first)
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialized_for_installation
|
def materialized_for_installation
|
||||||
|
@ -137,7 +137,9 @@ module Bundler
|
||||||
source.local!
|
source.local!
|
||||||
|
|
||||||
if use_exact_resolved_specifications?
|
if use_exact_resolved_specifications?
|
||||||
materialize_strictly
|
materialize(self) do |matching_specs|
|
||||||
|
choose_compatible(matching_specs)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
materialize([name, version]) do |matching_specs|
|
materialize([name, version]) do |matching_specs|
|
||||||
target_platform = source.is_a?(Source::Path) ? platform : local_platform
|
target_platform = source.is_a?(Source::Path) ? platform : local_platform
|
||||||
|
@ -185,12 +187,6 @@ module Bundler
|
||||||
(most_specific_locked_platform != generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
|
(most_specific_locked_platform != generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialize_strictly
|
|
||||||
materialize(self) do |matching_specs|
|
|
||||||
choose_compatible(matching_specs)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def materialize(query)
|
def materialize(query)
|
||||||
matching_specs = source.specs.search(query)
|
matching_specs = source.specs.search(query)
|
||||||
return self if matching_specs.empty?
|
return self if matching_specs.empty?
|
||||||
|
|
|
@ -482,6 +482,53 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
expect(the_bundle).to include_gems("platform_specific 1.0 ruby")
|
expect(the_bundle).to include_gems("platform_specific 1.0 ruby")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "keeps gems that are locked and cached for the current platform, even if incompatible with the current ruby" do
|
||||||
|
build_repo4 do
|
||||||
|
build_gem "bcrypt_pbkdf", "1.1.1"
|
||||||
|
build_gem "bcrypt_pbkdf", "1.1.1" do |s|
|
||||||
|
s.platform = "arm64-darwin"
|
||||||
|
s.required_ruby_version = "< #{current_ruby_minor}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
app_cache = bundled_app("vendor/cache")
|
||||||
|
FileUtils.mkdir_p app_cache
|
||||||
|
FileUtils.cp gem_repo4("gems/bcrypt_pbkdf-1.1.1-arm64-darwin.gem"), app_cache
|
||||||
|
FileUtils.cp gem_repo4("gems/bcrypt_pbkdf-1.1.1.gem"), app_cache
|
||||||
|
|
||||||
|
bundle "config cache_all_platforms true"
|
||||||
|
|
||||||
|
lockfile <<~L
|
||||||
|
GEM
|
||||||
|
remote: https://gem.repo4/
|
||||||
|
specs:
|
||||||
|
bcrypt_pbkdf (1.1.1)
|
||||||
|
bcrypt_pbkdf (1.1.1-arm64-darwin)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
arm64-darwin
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
bcrypt_pbkdf
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
#{Bundler::VERSION}
|
||||||
|
L
|
||||||
|
|
||||||
|
simulate_platform "arm64-darwin-23" do
|
||||||
|
install_gemfile <<~G, verbose: true
|
||||||
|
source "https://gem.repo4"
|
||||||
|
gem "bcrypt_pbkdf"
|
||||||
|
G
|
||||||
|
|
||||||
|
expect(out).to include("Updating files in vendor/cache")
|
||||||
|
expect(err).to be_empty
|
||||||
|
expect(app_cache.join("bcrypt_pbkdf-1.1.1-arm64-darwin.gem")).to exist
|
||||||
|
expect(app_cache.join("bcrypt_pbkdf-1.1.1.gem")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "does not update the cache if --no-cache is passed" do
|
it "does not update the cache if --no-cache is passed" do
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
source "https://gem.repo1"
|
source "https://gem.repo1"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue