summaryrefslogtreecommitdiff
path: root/lib/bundler/definition.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/definition.rb')
-rw-r--r--lib/bundler/definition.rb65
1 files changed, 28 insertions, 37 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index e668ac7953..1a4b703aa5 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -199,10 +199,6 @@ module Bundler
@locked_specs - specs
end
- def new_platform?
- @new_platform
- end
-
def missing_specs
missing = []
resolve.materialize(requested_dependencies, missing)
@@ -232,6 +228,12 @@ module Bundler
end
end
+ def requested_dependencies
+ groups = requested_groups
+ groups.map!(&:to_sym)
+ dependencies_for(groups)
+ end
+
def current_dependencies
dependencies.select do |d|
d.should_include? && !d.gem_platforms(@platforms).empty?
@@ -243,6 +245,12 @@ module Bundler
specs.for(expand_dependencies(deps))
end
+ def dependencies_for(groups)
+ current_dependencies.reject do |d|
+ (d.groups & groups).empty?
+ end
+ end
+
# Resolve all the dependencies specified in Gemfile. It ensures that
# dependencies that have been already resolved via locked file and are fresh
# are reused when resolving dependencies
@@ -318,10 +326,6 @@ module Bundler
sources.rubygems_sources.any? {|s| s.remotes.any? }
end
- def has_local_dependencies?
- !sources.path_sources.empty? || !sources.git_sources.empty?
- end
-
def spec_git_paths
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
end
@@ -541,7 +545,7 @@ module Bundler
@unlocking
end
- private
+ private
def add_platforms
(@dependencies.flat_map(&:expanded_platforms) + current_platforms).uniq.each do |platform|
@@ -550,10 +554,9 @@ module Bundler
end
def current_platforms
- current_platform = Bundler.local_platform
[].tap do |platforms|
- platforms << current_platform if Bundler.feature_flag.specific_platform?
- platforms << generic(current_platform)
+ platforms << local_platform if Bundler.feature_flag.specific_platform?
+ platforms << generic_local_platform
end
end
@@ -821,7 +824,7 @@ module Bundler
end
resolve = SpecSet.new(converged)
- @locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
+ @locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), @unlock[:gems], true, true)
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
diff = nil
@@ -859,11 +862,7 @@ module Bundler
def metadata_dependencies
@metadata_dependencies ||= begin
- ruby_versions = concat_ruby_version_requirements(@ruby_version)
- if ruby_versions.empty? || !@ruby_version.exact?
- concat_ruby_version_requirements(RubyVersion.system, ruby_versions)
- concat_ruby_version_requirements(locked_ruby_version_object, ruby_versions) unless @unlock[:ruby]
- end
+ ruby_versions = ruby_version_requirements(@ruby_version)
[
Dependency.new("Ruby\0", ruby_versions),
Dependency.new("RubyGems\0", Gem::VERSION),
@@ -871,47 +870,39 @@ module Bundler
end
end
- def concat_ruby_version_requirements(ruby_version, ruby_versions = [])
- return ruby_versions unless ruby_version
+ def ruby_version_requirements(ruby_version)
+ return [] unless ruby_version
if ruby_version.patchlevel
- ruby_versions << ruby_version.to_gem_version_with_patchlevel
+ [ruby_version.to_gem_version_with_patchlevel]
else
- ruby_versions.concat(ruby_version.versions.map do |version|
+ ruby_version.versions.map do |version|
requirement = Gem::Requirement.new(version)
if requirement.exact?
"~> #{version}.0"
else
requirement
end
- end)
+ end
end
end
def expand_dependencies(dependencies, remote = false)
- sorted_platforms = Resolver.sort_platforms(@platforms)
deps = []
dependencies.each do |dep|
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
- next if !remote && !dep.current_platform?
- dep.gem_platforms(sorted_platforms).each do |p|
- deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
- end
+ next unless remote || dep.current_platform?
+ target_platforms = dep.gem_platforms(remote ? Resolver.sort_platforms(@platforms) : [generic_local_platform])
+ deps += expand_dependency_with_platforms(dep, target_platforms)
end
deps
end
- def dependencies_for(groups)
- current_dependencies.reject do |d|
- (d.groups & groups).empty?
+ def expand_dependency_with_platforms(dep, platforms)
+ platforms.map do |p|
+ DepProxy.new(dep, p)
end
end
- def requested_dependencies
- groups = requested_groups
- groups.map!(&:to_sym)
- dependencies_for(groups)
- end
-
def source_requirements
# Load all specs from remote sources
index