From b85d2e8a5a992af04069ce186e7a720a1f101f5c Mon Sep 17 00:00:00 2001 From: naruse Date: Mon, 13 Mar 2017 06:58:19 +0000 Subject: merge revision(s) 57412: [Backport #13308] Update Rubygems 2.6.10 * https://github.com/rubygems/rubygems/commit/2ee5bf9fd3bd7649d3e244bc40107ff32070ef47 * https://github.com/rubygems/rubygems/commit/be510dd4097e65c6a256a6e173d6b724a3a96472 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@57952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems.rb | 2 +- lib/rubygems/commands/setup_command.rb | 2 +- lib/rubygems/core_ext/kernel_require.rb | 2 +- lib/rubygems/ext/ext_conf_builder.rb | 8 +++-- lib/rubygems/ext/rake_builder.rb | 2 +- .../molinillo/lib/molinillo/dependency_graph.rb | 4 ++- .../dependency_graph/detach_vertex_named.rb | 11 +++++-- .../lib/molinillo/dependency_graph/vertex.rb | 2 ++ .../molinillo/lib/molinillo/gem_metadata.rb | 2 +- .../resolver/molinillo/lib/molinillo/resolution.rb | 34 +++++++++++----------- lib/rubygems/server.rb | 15 +++++++--- lib/rubygems/stub_specification.rb | 7 ++++- lib/rubygems/version.rb | 8 +++-- 13 files changed, 64 insertions(+), 35 deletions(-) (limited to 'lib') diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 246956bb14..0c698b2813 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -10,7 +10,7 @@ require 'rbconfig' require 'thread' module Gem - VERSION = '2.6.8' + VERSION = "2.6.10" end # Must be first since it unloads the prelude from 1.9.2 diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index ebb08d24d7..2c29786224 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -47,7 +47,7 @@ class Gem::Commands::SetupCommand < Gem::Command end add_option '--[no-]document [TYPES]', Array, - 'Generate documentation for RubyGems.', + 'Generate documentation for RubyGems', 'List the documentation types you wish to', 'generate. For example: rdoc,ri' do |value, options| options[:document] = case value diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb index aa56ab5ec4..71a301c323 100755 --- a/lib/rubygems/core_ext/kernel_require.rb +++ b/lib/rubygems/core_ext/kernel_require.rb @@ -44,7 +44,7 @@ module Kernel spec = Gem.find_unresolved_default_spec(path) if spec Gem.remove_unresolved_default_spec(spec) - gem(spec.name) + Kernel.send(:gem, spec.name) end # If there are no unresolved deps, then we can use just try diff --git a/lib/rubygems/ext/ext_conf_builder.rb b/lib/rubygems/ext/ext_conf_builder.rb index 59e243b972..b6dde01950 100644 --- a/lib/rubygems/ext/ext_conf_builder.rb +++ b/lib/rubygems/ext/ext_conf_builder.rb @@ -48,9 +48,11 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder run cmd, results ensure if File.exist? 'mkmf.log' - results << "To see why this extension failed to compile, please check" \ - " the mkmf.log which can be found here:\n" - results << " " + File.join(dest_path, 'mkmf.log') + "\n" + unless $?.success? then + results << "To see why this extension failed to compile, please check" \ + " the mkmf.log which can be found here:\n" + results << " " + File.join(dest_path, 'mkmf.log') + "\n" + end FileUtils.mv 'mkmf.log', dest_path end siteconf.unlink diff --git a/lib/rubygems/ext/rake_builder.rb b/lib/rubygems/ext/rake_builder.rb index 682f1253e1..ec904e6c11 100644 --- a/lib/rubygems/ext/rake_builder.rb +++ b/lib/rubygems/ext/rake_builder.rb @@ -9,7 +9,7 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil) if File.basename(extension) =~ /mkrf_conf/i then - cmd = "#{Gem.ruby} #{File.basename extension}" + cmd = "#{Gem.ruby} #{File.basename extension}".dup cmd << " #{args.join " "}" unless args.empty? run cmd, results end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb index 40136eb894..139165102e 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb @@ -119,6 +119,7 @@ module Gem::Resolver::Molinillo # {Vertex#successors} def ==(other) return false unless other + return true if equal?(other) vertices.each do |name, vertex| other_vertex = other.vertex_named(name) return false unless other_vertex @@ -134,6 +135,7 @@ module Gem::Resolver::Molinillo def add_child_vertex(name, payload, parent_names, requirement) root = !parent_names.delete(nil) { true } vertex = add_vertex(name, payload, root) + vertex.explicit_requirements << requirement if root parent_names.each do |parent_name| parent_node = vertex_named(parent_name) add_edge(parent_node, vertex, requirement) @@ -152,7 +154,7 @@ module Gem::Resolver::Molinillo # Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively # removing any non-root vertices that were orphaned in the process # @param [String] name - # @return [void] + # @return [Array] the vertices which have been detached def detach_vertex_named(name) log.detach_vertex_named(self, name) end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb index 9ad34e8fe0..fa03e2d365 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb @@ -14,16 +14,23 @@ module Gem::Resolver::Molinillo # (see Action#up) def up(graph) - return unless @vertex = graph.vertices.delete(name) + return [] unless @vertex = graph.vertices.delete(name) + + removed_vertices = [@vertex] @vertex.outgoing_edges.each do |e| v = e.destination v.incoming_edges.delete(e) - graph.detach_vertex_named(v.name) unless v.root? || v.predecessors.any? + if !v.root? && v.incoming_edges.empty? + removed_vertices.concat graph.detach_vertex_named(v.name) + end end + @vertex.incoming_edges.each do |e| v = e.origin v.outgoing_edges.delete(e) end + + removed_vertices end # (see Action#down) diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb index 88d109c94f..b5a0688a32 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb @@ -81,6 +81,7 @@ module Gem::Resolver::Molinillo # @return [Boolean] whether the two vertices are equal, determined # by a recursive traversal of each {Vertex#successors} def ==(other) + return true if equal?(other) shallow_eql?(other) && successors.to_set == other.successors.to_set end @@ -89,6 +90,7 @@ module Gem::Resolver::Molinillo # @return [Boolean] whether the two vertices are equal, determined # solely by {#name} and {#payload} equality def shallow_eql?(other) + return true if equal?(other) other && name == other.name && payload == other.payload diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb index c50fa77bd5..dfddafe993 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Gem::Resolver::Molinillo # The version of Gem::Resolver::Molinillo. - VERSION = '0.5.3'.freeze + VERSION = '0.5.5'.freeze end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb index 54a6c3fc17..ea497ddcaf 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb @@ -194,18 +194,20 @@ module Gem::Resolver::Molinillo def state_index_for_unwind current_requirement = requirement existing_requirement = requirement_for_existing_name(name) - until current_requirement.nil? - current_state = find_state_for(current_requirement) - return states.index(current_state) if state_any?(current_state) - current_requirement = parent_of(current_requirement) + index = -1 + [current_requirement, existing_requirement].each do |r| + until r.nil? + current_state = find_state_for(r) + if state_any?(current_state) + current_index = states.index(current_state) + index = current_index if current_index > index + break + end + r = parent_of(r) + end end - until existing_requirement.nil? - existing_state = find_state_for(existing_requirement) - return states.index(existing_state) if state_any?(existing_state) - existing_requirement = parent_of(existing_requirement) - end - -1 + index end # @return [Object] the requirement that led to `requirement` being added @@ -364,19 +366,17 @@ module Gem::Resolver::Molinillo if matching_deps.empty? && !succ.root? && succ.predecessors.to_a == [vertex] debug(depth) { "Removing orphaned spec #{succ.name} after swapping #{name}" } succ.requirements.each { |r| @parent_of.delete(r) } - activated.detach_vertex_named(succ.name) - - all_successor_names = succ.recursive_successors.map(&:name) - requirements.delete_if do |requirement| - requirement_name = name_for(requirement) - (requirement_name == succ.name) || all_successor_names.include?(requirement_name) + removed_names = activated.detach_vertex_named(succ.name).map(&:name) + requirements.delete_if do |r| + # the only removed vertices are those with no other requirements, + # so it's safe to delete only based upon name here + removed_names.include?(name_for(r)) end elsif !matching_deps.include?(outgoing_edge.requirement) activated.delete_edge(outgoing_edge) requirements.delete(outgoing_edge.requirement) end - matching_deps.delete(outgoing_edge.requirement) end end diff --git a/lib/rubygems/server.rb b/lib/rubygems/server.rb index 63dfe31b35..81df0e608e 100644 --- a/lib/rubygems/server.rb +++ b/lib/rubygems/server.rb @@ -2,6 +2,7 @@ require 'webrick' require 'zlib' require 'erb' +require 'uri' require 'rubygems' require 'rubygems/rdoc' @@ -68,7 +69,7 @@ class Gem::Server

Summary

There are <%=values["gem_count"]%> gems installed:

- <%= values["specs"].map { |v| "#{h v["name"]}" }.join ', ' %>. + <%= values["specs"].map { |v| "#{h v["name"]}" }.join ', ' %>.

Gems

@@ -81,20 +82,20 @@ class Gem::Server <%=h spec["name"]%> <%=h spec["version"]%> <% if spec["ri_installed"] || spec["rdoc_installed"] then %> - ">[rdoc] + ">[rdoc] <% else %> [rdoc] <% end %> <% if spec["homepage"] then %> - " title="<%=h spec["homepage"]%>">[www] + " title="<%=h spec["homepage"]%>">[www] <% else %> [www] <% end %> <% if spec["has_deps"] then %> - depends on - <%= spec["dependencies"].map { |v| "#{h v["name"]}" }.join ', ' %>. + <%= spec["dependencies"].map { |v| "#{h v["name"]}" }.join ', ' %>. <% end %>
@@ -455,6 +456,12 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; } end.max end + def uri_encode(str) + str.gsub(URI::UNSAFE) do |match| + match.each_byte.map { |c| sprintf('%%%02X', c.ord) }.join + end + end + def doc_root gem_name if have_rdoc_4_plus? then "/doc_root/#{u gem_name}/" diff --git a/lib/rubygems/stub_specification.rb b/lib/rubygems/stub_specification.rb index 1c56a102c5..b741843124 100644 --- a/lib/rubygems/stub_specification.rb +++ b/lib/rubygems/stub_specification.rb @@ -39,7 +39,12 @@ class Gem::StubSpecification < Gem::BasicSpecification def initialize data, extensions parts = data[PREFIX.length..-1].split(" ".freeze, 4) @name = parts[0].freeze - @version = Gem::Version.new parts[1] + @version = if Gem::Version.correct?(parts[1]) + Gem::Version.new(parts[1]) + else + Gem::Version.new(0) + end + @platform = Gem::Platform.new parts[2] @extensions = extensions @full_name = if platform == Gem::Platform::RUBY diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb index 2f6cfae6ed..17dd7b0795 100644 --- a/lib/rubygems/version.rb +++ b/lib/rubygems/version.rb @@ -204,8 +204,12 @@ class Gem::Version # series of digits or ASCII letters separated by dots. def initialize version - raise ArgumentError, "Malformed version number string #{version}" unless - self.class.correct?(version) + unless self.class.correct?(version) + raise ArgumentError, "Malformed version number string #{version}" + end + + # If version is an empty string convert it to 0 + version = 0 if version =~ /\A\s*\Z/ @version = version.to_s.strip.gsub("-",".pre.") @segments = nil -- cgit v1.2.3