diff options
author | David Rodriguez <deivid.rodriguez@riseup.net> | 2024-03-21 20:59:42 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-04-01 15:03:28 +0000 |
commit | e2a1d0b53dddc29b03a535286763fde51d4e089d (patch) | |
tree | 0a16519ad4da81f6d62d85ee8986aa2fd45b7c3f /lib/bundler/resolver.rb | |
parent | f80bb3837c2ba2d46d8906c5f4bdc65f475c76db (diff) |
[rubygems/rubygems] Improve error message when strict resolution filters out everything
https://github.com/rubygems/rubygems/commit/1ea44b3749
Diffstat (limited to 'lib/bundler/resolver.rb')
-rw-r--r-- | lib/bundler/resolver.rb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index c148c79b37..1a6711ea6f 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -342,6 +342,17 @@ module Bundler @gem_version_promoter.filter_versions(package, @all_versions[package]) end + def raise_all_versions_filtered_out!(package) + level = @gem_version_promoter.level + name = package.name + locked_version = package.locked_version + requirement = package.dependency + + raise GemNotFound, + "#{name} is locked to #{locked_version}, while Gemfile is requesting #{requirement}. " \ + "--strict --#{level} was specified, but there are no #{level} level upgrades from #{locked_version} satisfying #{requirement}, so version solving has failed" + end + def filter_matching_specs(specs, requirements) Array(requirements).flat_map do |requirement| specs.select {| spec| requirement_satisfied_by?(requirement, spec) } @@ -391,6 +402,11 @@ module Bundler dep_package.consider_prereleases! versions = select_sorted_versions(dep_package, dep_range) end + + if versions.empty? && select_all_versions(dep_package, dep_range).any? + raise_all_versions_filtered_out!(dep_package) + end + next [dep_package, dep_constraint] unless versions.empty? next unless dep_package.current_platform? @@ -403,6 +419,10 @@ module Bundler range.select_versions(@sorted_versions[package]) end + def select_all_versions(package, range) + range.select_versions(@all_versions[package]) + end + def other_specs_matching_message(specs, requirement) message = String.new("The source contains the following gems matching '#{requirement}':\n") message << specs.map {|s| " * #{s.full_name}" }.join("\n") |