Skip to content

Commit

Permalink
Preserve the previous behavior of raising an error when in frozen mode
Browse files Browse the repository at this point in the history
  • Loading branch information
deivid-rodriguez committed Jul 31, 2022
1 parent 7b0f780 commit 6e35a6e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 38 deletions.
6 changes: 5 additions & 1 deletion bundler/lib/bundler/lazy_specification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ def __materialize__(candidates)
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
end
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
if search.nil? && Bundler.frozen_bundle?
search = candidates.last
else
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
end
search
end
end
Expand Down
87 changes: 50 additions & 37 deletions bundler/spec/install/gems/resolving_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -241,55 +241,68 @@
expect(the_bundle).to include_gems("rack 1.2")
end

it "automatically updates lockfile to use the older version" do
build_repo2 do
build_gem "parallel_tests", "3.7.0" do |s|
s.required_ruby_version = ">= #{current_ruby_minor}"
end
context "when there is a lockfile using the newer incompatible version" do
before 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}"
build_gem "parallel_tests", "3.8.0" do |s|
s.required_ruby_version = ">= #{next_ruby_minor}"
end
end
end

gemfile <<-G
source "http://localgemserver.test/"
gem 'parallel_tests'
G
gemfile <<-G
source "http://localgemserver.test/"
gem 'parallel_tests'
G

lockfile <<~L
GEM
remote: http://localgemserver.test/
specs:
parallel_tests (3.8.0)
lockfile <<~L
GEM
remote: http://localgemserver.test/
specs:
parallel_tests (3.8.0)
PLATFORMS
#{lockfile_platforms}
PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
parallel_tests
DEPENDENCIES
parallel_tests
BUNDLED WITH
#{Bundler::VERSION}
L
BUNDLED WITH
#{Bundler::VERSION}
L
end

bundle "install --verbose", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo2.to_s }
it "automatically updates lockfile to use the older version" do
bundle "install --verbose", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo2.to_s }

expect(lockfile).to eq <<~L
GEM
remote: http://localgemserver.test/
specs:
parallel_tests (3.7.0)
expect(lockfile).to eq <<~L
GEM
remote: http://localgemserver.test/
specs:
parallel_tests (3.7.0)
PLATFORMS
#{lockfile_platforms}
PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
parallel_tests
DEPENDENCIES
parallel_tests
BUNDLED WITH
#{Bundler::VERSION}
L
BUNDLED WITH
#{Bundler::VERSION}
L
end

it "gives a meaningful error if we're in frozen mode" do
expect do
bundle "install --verbose", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo2.to_s, "BUNDLE_FROZEN" => "true" }, :raise_on_error => false
end.not_to change { lockfile }

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
end

it "gives a meaningful error on ruby version mismatches between dependencies" do
Expand Down

0 comments on commit 6e35a6e

Please sign in to comment.