diff options
author | Hiroshi SHIBATA <[email protected]> | 2020-12-15 08:32:54 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <[email protected]> | 2020-12-15 10:54:09 +0900 |
commit | 2fa9f3c0322570dfb1672b49bc1f3306ef595131 (patch) | |
tree | bdb2889c822e634f931d27f2ca81c6192e6e5b0e /lib | |
parent | 7898f4243f5df9ead0bf91cc8c40907c559d18c0 (diff) |
Prepare to release rubygems-3.2.1 and bundler-2.2.1
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3901
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bundler.rb | 12 | ||||
-rw-r--r-- | lib/bundler/cli.rb | 2 | ||||
-rw-r--r-- | lib/bundler/cli/outdated.rb | 4 | ||||
-rw-r--r-- | lib/bundler/definition.rb | 21 | ||||
-rw-r--r-- | lib/bundler/dependency.rb | 4 | ||||
-rw-r--r-- | lib/bundler/lazy_specification.rb | 16 | ||||
-rw-r--r-- | lib/bundler/resolver.rb | 49 | ||||
-rw-r--r-- | lib/bundler/resolver/spec_group.rb | 14 | ||||
-rw-r--r-- | lib/bundler/rubygems_integration.rb | 1 | ||||
-rw-r--r-- | lib/bundler/stub_specification.rb | 2 | ||||
-rw-r--r-- | lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb | 9 | ||||
-rw-r--r-- | lib/bundler/version.rb | 2 | ||||
-rw-r--r-- | lib/rubygems.rb | 2 | ||||
-rw-r--r-- | lib/rubygems/resolver/api_set.rb | 2 | ||||
-rw-r--r-- | lib/rubygems/source.rb | 1 |
15 files changed, 77 insertions, 64 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb index 0ddd2c7f88..7a01de5ddb 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -212,6 +212,15 @@ module Bundler end end + def locked_bundler_version + return nil unless defined?(@definition) && @definition + + locked_gems = definition.locked_gems + return nil unless locked_gems + + locked_gems.bundler_version + end + def ruby_scope "#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}" end @@ -602,8 +611,9 @@ EOF reset_rubygems! end - def reset_settings! + def reset_settings_and_root! @settings = nil + @root = nil end def reset_paths! diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index e2dceb98d5..2f495d427d 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -57,7 +57,7 @@ module Bundler custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile] if custom_gemfile && !custom_gemfile.empty? Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", File.expand_path(custom_gemfile) - Bundler.reset_settings! + Bundler.reset_settings_and_root! end Bundler.settings.set_command_option_if_given :retry, options[:retry] diff --git a/lib/bundler/cli/outdated.rb b/lib/bundler/cli/outdated.rb index b8d9be20b6..6a1789e235 100644 --- a/lib/bundler/cli/outdated.rb +++ b/lib/bundler/cli/outdated.rb @@ -76,6 +76,8 @@ module Bundler next unless gems.empty? || gems.include?(current_spec.name) active_spec = retrieve_active_spec(definition, current_spec) + next unless active_spec + next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options) gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version) @@ -229,8 +231,6 @@ module Bundler end def update_present_via_semver_portions(current_spec, active_spec, options) - return false if active_spec.nil? - current_major = current_spec.version.segments.first active_major = active_spec.version.segments.first diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 4cf4f76084..fdd093fbb3 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -269,7 +269,9 @@ module Bundler else # Run a resolve against the locally available gems Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}") - last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms) + platforms_for_resolve = platforms.one? {|p| generic(p) == Gem::Platform::RUBY } ? platforms : platforms.reject{|p| p == Gem::Platform::RUBY } + expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote, platforms_for_resolve.map {|p| generic(p) }) + last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms_for_resolve) end # filter out gems that _can_ be installed on multiple platforms, but don't need @@ -548,11 +550,7 @@ module Bundler private def add_current_platform - current_platforms.each {|platform| add_platform(platform) } - end - - def current_platforms - [local_platform, generic_local_platform].uniq + add_platform(local_platform) end def change_reason @@ -847,14 +845,6 @@ module Bundler @locked_specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) } end - # This list of dependencies is only used in #resolve, so it's OK to add - # the metadata dependencies here - def expanded_dependencies - @expanded_dependencies ||= begin - expand_dependencies(dependencies + metadata_dependencies, @remote) - end - end - def metadata_dependencies @metadata_dependencies ||= begin ruby_versions = ruby_version_requirements(@ruby_version) @@ -881,7 +871,8 @@ module Bundler end end - def expand_dependencies(dependencies, remote = false) + def expand_dependencies(dependencies, remote = false, platforms = nil) + platforms ||= @platforms deps = [] dependencies.each do |dep| dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name) diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb index 26e5f3d1a5..af07e8bc36 100644 --- a/lib/bundler/dependency.rb +++ b/lib/bundler/dependency.rb @@ -96,9 +96,11 @@ module Bundler def gem_platforms(valid_platforms) return valid_platforms if @platforms.empty? + valid_generic_platforms = valid_platforms.map {|p| [p, GemHelpers.generic(p)] }.to_h @gem_platforms ||= expanded_platforms.compact.uniq - valid_platforms & @gem_platforms + filtered_generic_platforms = valid_generic_platforms.values & @gem_platforms + valid_generic_platforms.select {|_, v| filtered_generic_platforms.include?(v) }.keys end def expanded_platforms diff --git a/lib/bundler/lazy_specification.rb b/lib/bundler/lazy_specification.rb index 22bf0f3f6f..7b1d28b0c3 100644 --- a/lib/bundler/lazy_specification.rb +++ b/lib/bundler/lazy_specification.rb @@ -82,7 +82,7 @@ module Bundler search_object = if source.is_a?(Source::Path) Dependency.new(name, version) else - self + ruby_platform_materializes_to_ruby_platform? ? self : Dependency.new(name, version) end platform_object = Gem::Platform.new(platform) candidates = source.specs.search(search_object) @@ -129,5 +129,19 @@ module Bundler @specification.send(method, *args, &blk) end + + # + # Bundler 2.2.0 was the first version that records the full resolution + # including platform specific gems in the lockfile, which means that if a + # gem with RUBY platform is recorded, the RUBY platform version of the gem + # should be installed. Previously bundler would record only generic versions + # in the lockfile and then install the most specific platform variant if + # available. + # + def ruby_platform_materializes_to_ruby_platform? + locked_bundler_version = Bundler.locked_bundler_version + + locked_bundler_version.nil? || Gem::Version.new(locked_bundler_version) >= Gem::Version.new("2.2.0") + end end end diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 327c170fbe..4bbcbd1162 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -75,7 +75,7 @@ module Bundler return unless debug? debug_info = yield debug_info = debug_info.inspect unless debug_info.is_a?(String) - warn debug_info.split("\n").map {|s| "BUNDLER: " + " " * depth + s } + puts debug_info.split("\n").map {|s| "BUNDLER: " + " " * depth + s } end def debug? @@ -106,18 +106,19 @@ module Bundler specification.dependencies_for_activated_platforms end - def search_for(dependency) - platform = dependency.__platform - dependency = dependency.dep unless dependency.is_a? Gem::Dependency - search = @search_for[dependency] ||= begin + def search_for(dependency_proxy) + platform = dependency_proxy.__platform + dependency = dependency_proxy.dep + @search_for[dependency_proxy] ||= begin + name = dependency.name index = index_for(dependency) - results = index.search(dependency, @base[dependency.name]) + results = index.search(dependency, @base[name]) - if vertex = @base_dg.vertex_named(dependency.name) + if vertex = @base_dg.vertex_named(name) locked_requirement = vertex.payload.requirement end - if !@prerelease_specified[dependency.name] && (!@use_gvp || locked_requirement.nil?) + if !@prerelease_specified[name] && (!@use_gvp || locked_requirement.nil?) # Move prereleases to the beginning of the list, so they're considered # last during resolution. pre, results = results.partition {|spec| spec.version.prerelease? } @@ -145,31 +146,25 @@ module Bundler end # GVP handles major itself, but it's still a bit risky to trust it with it # until we get it settled with new behavior. For 2.x it can take over all cases. - if !@use_gvp + search = if !@use_gvp spec_groups else @gem_version_promoter.sort_versions(dependency, spec_groups) end - end - selected_sgs = [] - search.each do |sg| - next unless sg.for?(platform) - # Add a spec group for "non platform specific spec" as the fallback - # spec group. - sg_ruby = sg.copy_for(Gem::Platform::RUBY) - selected_sgs << sg_ruby if sg_ruby - sg_all_platforms = nil - all_platforms = @platforms + [platform] - self.class.sort_platforms(all_platforms).reverse_each do |other_platform| - if sg_all_platforms.nil? - sg_all_platforms = sg.copy_for(other_platform) - else - sg_all_platforms.activate_platform!(other_platform) - end + selected_sgs = [] + search.each do |sg| + next unless sg.for?(platform) + sg_all_platforms = sg.copy_for(self.class.sort_platforms(@platforms).reverse) + selected_sgs << sg_all_platforms + + next if sg_all_platforms.activated_platforms == [Gem::Platform::RUBY] + # Add a spec group for "non platform specific spec" as the fallback + # spec group. + sg_ruby = sg.copy_for([Gem::Platform::RUBY]) + selected_sgs.insert(-2, sg_ruby) if sg_ruby end - selected_sgs << sg_all_platforms + selected_sgs end - selected_sgs end def index_for(dependency) diff --git a/lib/bundler/resolver/spec_group.rb b/lib/bundler/resolver/spec_group.rb index 8b5759cfad..38dc175ff9 100644 --- a/lib/bundler/resolver/spec_group.rb +++ b/lib/bundler/resolver/spec_group.rb @@ -6,7 +6,7 @@ module Bundler include GemHelpers attr_accessor :name, :version, :source - attr_accessor :ignores_bundler_dependencies + attr_accessor :ignores_bundler_dependencies, :activated_platforms def initialize(all_specs) @all_specs = all_specs @@ -32,17 +32,13 @@ module Bundler end.compact.uniq end - def activate_platform!(platform) - return unless for?(platform) - return if @activated_platforms.include?(platform) - @activated_platforms << platform - end + def copy_for(platforms) + platforms.select! {|p| for?(p) } + return unless platforms.any? - def copy_for(platform) copied_sg = self.class.new(@all_specs) copied_sg.ignores_bundler_dependencies = @ignores_bundler_dependencies - return nil unless copied_sg.for?(platform) - copied_sg.activate_platform!(platform) + copied_sg.activated_platforms = platforms copied_sg end diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb index 9125a24172..c577001043 100644 --- a/lib/bundler/rubygems_integration.rb +++ b/lib/bundler/rubygems_integration.rb @@ -565,7 +565,6 @@ module Bundler end def all_specs - require_relative "remote_specification" Gem::Specification.stubs.map do |stub| StubSpecification.from_stub(stub) end diff --git a/lib/bundler/stub_specification.rb b/lib/bundler/stub_specification.rb index a45e28b8a7..2456d268da 100644 --- a/lib/bundler/stub_specification.rb +++ b/lib/bundler/stub_specification.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require_relative "remote_specification" - module Bundler class StubSpecification < RemoteSpecification def self.from_stub(stub) diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb index d0ab956faf..beff6d658b 100644 --- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb @@ -159,7 +159,14 @@ class Bundler::Persistent::Net::HTTP::Persistent # limits (typically windows). if Process.const_defined? :RLIMIT_NOFILE - DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4 + open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE) + + # Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs + if open_file_limits.respond_to?(:first) + DEFAULT_POOL_SIZE = open_file_limits.first / 4 + else + DEFAULT_POOL_SIZE = 256 + end else DEFAULT_POOL_SIZE = 256 end diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index c865621acb..b8b331d85e 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false module Bundler - VERSION = "2.2.0".freeze + VERSION = "2.2.1".freeze def self.bundler_major_version @bundler_major_version ||= VERSION.split(".").first.to_i diff --git a/lib/rubygems.rb b/lib/rubygems.rb index e6a3c63c60..7596585482 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -8,7 +8,7 @@ require 'rbconfig' module Gem - VERSION = "3.2.0".freeze + VERSION = "3.2.1".freeze end # Must be first since it unloads the prelude from 1.9.2 diff --git a/lib/rubygems/resolver/api_set.rb b/lib/rubygems/resolver/api_set.rb index 19c59a315b..cafcd5b472 100644 --- a/lib/rubygems/resolver/api_set.rb +++ b/lib/rubygems/resolver/api_set.rb @@ -52,7 +52,7 @@ class Gem::Resolver::APISet < Gem::Resolver::Set end versions(req.name).each do |ver| - if req.dependency.match? req.name, ver[:number] + if req.dependency.match? req.name, ver[:number], @prerelease res << Gem::Resolver::APISpecification.new(self, ver) end end diff --git a/lib/rubygems/source.rb b/lib/rubygems/source.rb index 891cc3e644..a2848112e7 100644 --- a/lib/rubygems/source.rb +++ b/lib/rubygems/source.rb @@ -148,6 +148,7 @@ class Gem::Source spec = Gem::Util.inflate spec if update_cache? + require "fileutils" FileUtils.mkdir_p cache_dir File.open local_spec, 'wb' do |io| |