diff options
Diffstat (limited to 'lib/bundler/resolver/spec_group.rb')
-rw-r--r-- | lib/bundler/resolver/spec_group.rb | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/lib/bundler/resolver/spec_group.rb b/lib/bundler/resolver/spec_group.rb index b44c19a73f..f950df6eda 100644 --- a/lib/bundler/resolver/spec_group.rb +++ b/lib/bundler/resolver/spec_group.rb @@ -3,6 +3,8 @@ module Bundler class Resolver class SpecGroup + attr_reader :specs + def initialize(specs) @specs = specs end @@ -25,9 +27,8 @@ module Bundler def to_specs(force_ruby_platform) @specs.map do |s| - lazy_spec = LazySpecification.new(name, version, s.platform, source) + lazy_spec = LazySpecification.from_spec(s) lazy_spec.force_ruby_platform = force_ruby_platform - lazy_spec.dependencies.replace s.dependencies lazy_spec end end @@ -39,17 +40,33 @@ module Bundler def dependencies @dependencies ||= @specs.map do |spec| __dependencies(spec) + metadata_dependencies(spec) - end.flatten.uniq + end.flatten.uniq.sort + end + + def ==(other) + sorted_spec_names == other.sorted_spec_names + end + + def merge(other) + return false unless equivalent?(other) + + @specs |= other.specs + + true end protected def sorted_spec_names - @sorted_spec_names ||= @specs.map(&:full_name).sort + @specs.map(&:full_name).sort end private + def equivalent?(other) + name == other.name && version == other.version && source == other.source && dependencies == other.dependencies + end + def exemplary_spec @specs.first end @@ -64,8 +81,6 @@ module Bundler end def metadata_dependencies(spec) - return [] if spec.is_a?(LazySpecification) - [ metadata_dependency("Ruby", spec.required_ruby_version), metadata_dependency("RubyGems", spec.required_rubygems_version), |