diff options
Diffstat (limited to 'lib/bundler/definition.rb')
-rw-r--r-- | lib/bundler/definition.rb | 65 |
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 |