lib/bundler/definition.rb in bundler-2.2.0.rc.1 vs lib/bundler/definition.rb in bundler-2.2.0.rc.2

- old
+ new

@@ -197,14 +197,10 @@ def removed_specs @locked_specs - specs end - def new_platform? - @new_platform - end - def missing_specs missing = [] resolve.materialize(requested_dependencies, missing) missing end @@ -230,10 +226,16 @@ groups.map!(&:to_sym) specs_for(groups) 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? end end @@ -241,10 +243,16 @@ def specs_for(groups) deps = dependencies_for(groups) 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 # # @return [SpecSet] resolved dependencies @@ -316,14 +324,10 @@ def has_rubygems_remotes? 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 def groups @@ -539,23 +543,22 @@ def unlocking? @unlocking end - private + private def add_platforms (@dependencies.flat_map(&:expanded_platforms) + current_platforms).uniq.each do |platform| add_platform(platform) end 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 def change_reason if unlocking? @@ -819,11 +822,11 @@ converged << s 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 # Now, we unlock any sources that do not have anymore gems pinned to it sources.all_sources.each do |source| @@ -857,60 +860,48 @@ end end 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), ] 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