diff options
author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2021-08-18 09:58:51 +0200 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2021-08-31 19:06:14 +0900 |
commit | 3683781f53cc22b9fa507e4a2848c30086fa7897 (patch) | |
tree | 82610caf483f7c852fb866bb2781bd516fe1fe14 | |
parent | 71f6711351b89330f5445cef6f0a38618627ce66 (diff) | |
download | ruby-3683781f53cc22b9fa507e4a2848c30086fa7897.tar.gz |
[rubygems/rubygems] Restore working `bundle check` behaviour
As part of a recent bug fix where bundler was accidentally hitting the
network when not supposed to, I made some refactoring, and the commit I'm
reverting here
(https://github.com/rubygems/rubygems/commit/d74830d00bb541883377992f56818620a78930b0)
was some cleanup that those refactorings allowed according to "past me".
That was completely wrong, `bundle check` should never consider cached
gems, only installed gems, so the code that was removed was necessary.
https://github.com/rubygems/rubygems/commit/5483e98305
-rw-r--r-- | lib/bundler/cli/check.rb | 2 | ||||
-rw-r--r-- | lib/bundler/definition.rb | 6 | ||||
-rw-r--r-- | lib/bundler/source.rb | 2 | ||||
-rw-r--r-- | lib/bundler/source/rubygems.rb | 6 | ||||
-rw-r--r-- | lib/bundler/source_list.rb | 4 | ||||
-rw-r--r-- | spec/bundler/commands/check_spec.rb | 16 |
6 files changed, 35 insertions, 1 deletions
diff --git a/lib/bundler/cli/check.rb b/lib/bundler/cli/check.rb index 4221fc7f2b..65c51337d2 100644 --- a/lib/bundler/cli/check.rb +++ b/lib/bundler/cli/check.rb @@ -15,7 +15,7 @@ module Bundler definition.validate_runtime! begin - definition.resolve_with_cache! + definition.resolve_only_locally! not_installed = definition.missing_specs rescue GemNotFound, VersionConflict Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies." diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 621bda686e..2bd1290cdd 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -166,6 +166,12 @@ module Bundler @multisource_allowed end + def resolve_only_locally! + @remote = false + sources.local_only! + resolve + end + def resolve_with_cache! sources.cached! resolve diff --git a/lib/bundler/source.rb b/lib/bundler/source.rb index 7bf493d73d..434112ac8a 100644 --- a/lib/bundler/source.rb +++ b/lib/bundler/source.rb @@ -36,6 +36,8 @@ module Bundler def local!; end + def local_only!; end + def cached!; end def remote!; end diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 298ff98e24..2e0ecb1aa6 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -26,6 +26,12 @@ module Bundler Array(options["remotes"]).reverse_each {|r| add_remote(r) } end + def local_only! + @specs = nil + @allow_local = true + @allow_remote = false + end + def local! return if @allow_local diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb index b97206f497..d6310b78c0 100644 --- a/lib/bundler/source_list.rb +++ b/lib/bundler/source_list.rb @@ -136,6 +136,10 @@ module Bundler different_sources?(lock_sources, replacement_sources) end + def local_only! + all_sources.each(&:local_only!) + end + def cached! all_sources.each(&:cached!) end diff --git a/spec/bundler/commands/check_spec.rb b/spec/bundler/commands/check_spec.rb index c48220f8df..7eb3fec2e5 100644 --- a/spec/bundler/commands/check_spec.rb +++ b/spec/bundler/commands/check_spec.rb @@ -137,6 +137,22 @@ RSpec.describe "bundle check" do expect(exitstatus).to eq(1) end + it "ensures that gems are actually installed and not just cached in applications' cache" do + gemfile <<-G + source "#{file_uri_for(gem_repo1)}" + gem "rack" + G + + bundle "config set --local path vendor/bundle" + bundle :cache + + gem_command "uninstall rack", :env => { "GEM_HOME" => vendored_gems.to_s } + + bundle "check", :raise_on_error => false + expect(err).to include("* rack (1.0.0)") + expect(exitstatus).to eq(1) + end + it "ignores missing gems restricted to other platforms" do gemfile <<-G source "#{file_uri_for(gem_repo1)}" |