diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-09-05 09:15:30 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-09-05 14:37:12 +0900 |
commit | 3eca1e438db6fabaa7cd5e5a7120da147ac0ec26 (patch) | |
tree | 597be042af7d0052616ba41bb9d0b8d8ceedd094 /lib/bundler/resolver | |
parent | 3767c6a90d8970f9b39e9ed116a7b9bbac3f9f26 (diff) |
Merge https://github.com/rubygems/rubygems/commit/16c3535413afebcdbab7582c6017c27b5da8a8dc
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6326
Diffstat (limited to 'lib/bundler/resolver')
-rw-r--r-- | lib/bundler/resolver/base.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/bundler/resolver/base.rb b/lib/bundler/resolver/base.rb new file mode 100644 index 0000000000..84e087b0ae --- /dev/null +++ b/lib/bundler/resolver/base.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module Bundler + class Resolver + class Base + def initialize(base, additional_base_requirements) + @base = base + @additional_base_requirements = additional_base_requirements + end + + def [](name) + @base[name] + end + + def delete(spec) + @base.delete(spec) + end + + def base_requirements + @base_requirements ||= build_base_requirements + end + + def unlock_deps(deps) + exact, lower_bound = deps.partition(&:specific?) + + exact.each do |exact_dep| + @base.delete_by_name_and_version(exact_dep.name, exact_dep.requirement.requirements.first.last) + end + + lower_bound.each do |lower_bound_dep| + @additional_base_requirements.delete(lower_bound_dep) + end + + @base_requirements = nil + end + + private + + def build_base_requirements + base_requirements = {} + @base.each do |ls| + dep = Dependency.new(ls.name, ls.version) + base_requirements[ls.name] = DepProxy.get_proxy(dep, ls.platform) + end + @additional_base_requirements.each {|d| base_requirements[d.name] = d } + base_requirements + end + end + end +end |