summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver/spec_group.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/resolver/spec_group.rb')
-rw-r--r--lib/bundler/resolver/spec_group.rb27
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),