[前][次][番号順一覧][スレッド一覧]

ruby-changes:45340

From: hsbt <ko1@a...>
Date: Tue, 24 Jan 2017 11:39:10 +0900 (JST)
Subject: [ruby-changes:45340] hsbt:r57412 (trunk): Update Rubygems 2.6.10

hsbt	2017-01-24 11:38:57 +0900 (Tue, 24 Jan 2017)

  New Revision: 57412

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57412

  Log:
    Update Rubygems 2.6.10
    
     * https://github.com/rubygems/rubygems/commit/2ee5bf9fd3bd7649d3e244bc40107ff32070ef47
     * https://github.com/rubygems/rubygems/commit/be510dd4097e65c6a256a6e173d6b724a3a96472

  Modified files:
    trunk/lib/rubygems/commands/setup_command.rb
    trunk/lib/rubygems/core_ext/kernel_require.rb
    trunk/lib/rubygems/ext/ext_conf_builder.rb
    trunk/lib/rubygems/ext/rake_builder.rb
    trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
    trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb
    trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb
    trunk/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb
    trunk/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb
    trunk/lib/rubygems/server.rb
    trunk/lib/rubygems/stub_specification.rb
    trunk/lib/rubygems/version.rb
    trunk/lib/rubygems.rb
    trunk/test/rubygems/test_gem.rb
    trunk/test/rubygems/test_gem_ext_ext_conf_builder.rb
    trunk/test/rubygems/test_gem_ext_rake_builder.rb
    trunk/test/rubygems/test_gem_remote_fetcher.rb
    trunk/test/rubygems/test_gem_server.rb
    trunk/test/rubygems/test_gem_specification.rb
    trunk/test/rubygems/test_gem_stub_specification.rb
    trunk/test/rubygems/test_gem_version.rb
    trunk/test/rubygems/test_require.rb
Index: lib/rubygems.rb
===================================================================
--- lib/rubygems.rb	(revision 57411)
+++ lib/rubygems.rb	(revision 57412)
@@ -10,7 +10,7 @@ require 'rbconfig' https://github.com/ruby/ruby/blob/trunk/lib/rubygems.rb#L10
 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
Index: lib/rubygems/version.rb
===================================================================
--- lib/rubygems/version.rb	(revision 57411)
+++ lib/rubygems/version.rb	(revision 57412)
@@ -204,8 +204,12 @@ class Gem::Version https://github.com/ruby/ruby/blob/trunk/lib/rubygems/version.rb#L204
   # 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
Index: lib/rubygems/commands/setup_command.rb
===================================================================
--- lib/rubygems/commands/setup_command.rb	(revision 57411)
+++ lib/rubygems/commands/setup_command.rb	(revision 57412)
@@ -47,7 +47,7 @@ class Gem::Commands::SetupCommand < Gem: https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/setup_command.rb#L47
     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
Index: lib/rubygems/server.rb
===================================================================
--- lib/rubygems/server.rb	(revision 57411)
+++ lib/rubygems/server.rb	(revision 57412)
@@ -2,6 +2,7 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems/server.rb#L2
 require 'webrick'
 require 'zlib'
 require 'erb'
+require 'uri'
 
 require 'rubygems'
 require 'rubygems/rdoc'
@@ -68,7 +69,7 @@ class Gem::Server https://github.com/ruby/ruby/blob/trunk/lib/rubygems/server.rb#L69
         <h1>Summary</h1>
   <p>There are <%=values["gem_count"]%> gems installed:</p>
   <p>
-  <%= values["specs"].map { |v| "<a href\"##{u v["name"]}\">#{h v["name"]}</a>" }.join ', ' %>.
+  <%= values["specs"].map { |v| "<a href=\"##{u v["name"]}\">#{h v["name"]}</a>" }.join ', ' %>.
   <h1>Gems</h1>
 
   <dl>
@@ -81,20 +82,20 @@ class Gem::Server https://github.com/ruby/ruby/blob/trunk/lib/rubygems/server.rb#L82
     <b><%=h spec["name"]%> <%=h spec["version"]%></b>
 
     <% if spec["ri_installed"] || spec["rdoc_installed"] then %>
-      <a href="<%=u spec["doc_path"]%>">[rdoc]</a>
+      <a href="<%=spec["doc_path"]%>">[rdoc]</a>
     <% else %>
       <span title="rdoc not installed">[rdoc]</span>
     <% end %>
 
     <% if spec["homepage"] then %>
-      <a href="<%=u spec["homepage"]%>" title="<%=h spec["homepage"]%>">[www]</a>
+      <a href="<%=uri_encode spec["homepage"]%>" title="<%=h spec["homepage"]%>">[www]</a>
     <% else %>
       <span title="no homepage available">[www]</span>
     <% end %>
 
     <% if spec["has_deps"] then %>
      - depends on
-      <%= spec["dependencies"].map { |v| "<a href=\"##{u v["name"]}>#{h v["name"]}</a>" }.join ', ' %>.
+      <%= spec["dependencies"].map { |v| "<a href=\"##{u v["name"]}\">#{h v["name"]}</a>" }.join ', ' %>.
     <% end %>
     </dt>
     <dd>
@@ -455,6 +456,12 @@ div.method-source-code pre { color: #ffd https://github.com/ruby/ruby/blob/trunk/lib/rubygems/server.rb#L456
     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}/"
Index: lib/rubygems/core_ext/kernel_require.rb
===================================================================
--- lib/rubygems/core_ext/kernel_require.rb	(revision 57411)
+++ lib/rubygems/core_ext/kernel_require.rb	(revision 57412)
@@ -44,7 +44,7 @@ module Kernel https://github.com/ruby/ruby/blob/trunk/lib/rubygems/core_ext/kernel_require.rb#L44
     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
Index: lib/rubygems/stub_specification.rb
===================================================================
--- lib/rubygems/stub_specification.rb	(revision 57411)
+++ lib/rubygems/stub_specification.rb	(revision 57412)
@@ -39,7 +39,12 @@ class Gem::StubSpecification < Gem::Basi https://github.com/ruby/ruby/blob/trunk/lib/rubygems/stub_specification.rb#L39
     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
Index: lib/rubygems/ext/rake_builder.rb
===================================================================
--- lib/rubygems/ext/rake_builder.rb	(revision 57411)
+++ lib/rubygems/ext/rake_builder.rb	(revision 57412)
@@ -9,7 +9,7 @@ class Gem::Ext::RakeBuilder < Gem::Ext:: https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/rake_builder.rb#L9
 
   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
Index: lib/rubygems/ext/ext_conf_builder.rb
===================================================================
--- lib/rubygems/ext/ext_conf_builder.rb	(revision 57411)
+++ lib/rubygems/ext/ext_conf_builder.rb	(revision 57412)
@@ -48,9 +48,11 @@ class Gem::Ext::ExtConfBuilder < Gem::Ex https://github.com/ruby/ruby/blob/trunk/lib/rubygems/ext/ext_conf_builder.rb#L48
           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
Index: lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb
===================================================================
--- lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb	(revision 57411)
+++ lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb	(revision 57412)
@@ -1,5 +1,5 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb#L1
 # 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
Index: lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
===================================================================
--- lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb	(revision 57411)
+++ lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb	(revision 57412)
@@ -14,16 +14,23 @@ module Gem::Resolver::Molinillo https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb#L14
 
       # (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)
Index: lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb
===================================================================
--- lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb	(revision 57411)
+++ lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb	(revision 57412)
@@ -81,6 +81,7 @@ module Gem::Resolver::Molinillo https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb#L81
       # @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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb#L90
       # @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
Index: lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb
===================================================================
--- lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb	(revision 57411)
+++ lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb	(revision 57412)
@@ -119,6 +119,7 @@ module Gem::Resolver::Molinillo https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb#L119
     #   {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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb#L135
     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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb#L154
     # 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<Vertex>] the vertices which have been detached
     def detach_vertex_named(name)
       log.detach_vertex_named(self, name)
     end
Index: lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb
===================================================================
--- lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb	(revision 57411)
+++ lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb	(revision 57412)
@@ -194,18 +194,20 @@ module Gem::Resolver::Molinillo https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb#L194
       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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb#L366
           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
 
Index: test/rubygems/test_gem_remote_fetcher.rb
===================================================================
--- test/rubygems/test_gem_remote_fetcher.rb	(revision 57411)
+++ test/rubygems/test_gem_remote_fetcher.rb	(revision 57412)
@@ -163,7 +163,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg== https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_remote_fetcher.rb#L163
     fetcher = Gem::RemoteFetcher.new nil
     @fetcher = fetcher
     def fetcher.request(uri, request_class, last_modified = nil)
-      raise SocketError, "tarded"
+      raise SocketError, "oops"
     end
 
     uri = 'http://gems.example.com/yaml'
@@ -171,7 +171,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg== https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_remote_fetcher.rb#L171
       fetcher.fetch_size uri
     end
 
-    assert_equal "SocketError: tarded (#{uri})", e.message
+    assert_equal "SocketError: oops (#{uri})", e.message
   end
 
   def test_no_proxy
Index: test/rubygems/test_gem_specification.rb
===================================================================
--- test/rubygems/test_gem_specification.rb	(revision 57411)
+++ test/rubygems/test_gem_specification.rb	(revision 57412)
@@ -1260,7 +1260,7 @@ dependencies: [] https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_specification.rb#L1260
       s.version = '1'
     end
 
-    spec.instance_variable_set :@licenses, Object.new.singleton_class
+    spec.instance_variable_set :@licenses, (class << (Object.new);self;end)
     spec.loaded_from = '/path/to/file'
 
     e = assert_raises Gem::FormatException do
Index: test/rubygems/test_require.rb
===================================================================
--- test/rubygems/test_require.rb	(revision 57411)
+++ test/rubygems/test_require.rb	(revision 57412)
@@ -341,6 +341,31 @@ class TestGemRequire < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_require.rb#L341
     Kernel::RUBYGEMS_ACTIVATION_MONITOR.exit
   end
 
+  def test_require_when_gem_defined
+    default_gem_spec = new_default_spec("default", "2.0.0.0",
+                                        nil, "default/gem.rb")
+    install_default_specs(default_gem_spec)
+    c = Class.new do
+      def self.gem(*args)
+        raise "received #gem with #{args.inspect}"
+      end
+    end
+    assert c.send(:require, "default/gem")
+    assert_equal %w(default-2.0.0.0), loaded_spec_names
+  end
+
+  def test_require_default_when_gem_defined
+    a = new_spec("a", "1", nil, "lib/a.rb")
+    install_specs a
+    c = Class.new do
+      def self.gem(*args)
+        raise "received #gem with #{args.inspect}"
+      end
+    end
+    assert c.send(:require, "a")
+    assert_equal %w(a-1), loaded_spec_names
+  end
+
   def silence_warnings
     old_verbose, $VERBOSE = $VERBOSE, false
     yield
Index: test/rubygems/test_gem_stub_specification.rb
===================================================================
--- test/rubygems/test_gem_stub_specification.rb	(revision 57411)
+++ test/rubygems/test_gem_stub_specification.rb	(revision 57412)
@@ -33,6 +33,20 @@ class TestStubSpecification < Gem::TestC https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_stub_specification.rb#L33
     assert_equal %w[ext/stub_e/extconf.rb],   stub.extensions
   end
 
+  def test_initialize_version
+    stub = stub_with_version
+
+    assert_equal 'stub_v',                    stub.name
+    assert_equal v(2),                        stub.version
+  end
+
+  def test_initialize_with_empty_version
+    stub = stub_without_version
+
+    assert_equal 'stub_v',                    stub.name
+    assert_equal v(0),                        stub.version
+  end
+
   def test_initialize_missing_stubline
     stub = Gem::StubSpecification.gemspec_stub(BAR, @base_dir, @gems_dir)
     assert_equal "bar", stub.name
@@ -164,6 +178,53 @@ class TestStubSpecification < Gem::TestC https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_stub_specification.rb#L178
     assert stub.to_spec.instance_variable_get :@ignored
   end
 
+  def stub_with_version
+    spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec'
+    open spec, 'w' do |io|
+      io.write <<-STUB
+# -*- encoding: utf-8 -*-
+# stub: stub_v 2 ruby lib
+
+Gem::Specification.new do |s|
+  s.name = 'stub_v'
+  s.version = Gem::Version.new '2'
+end
+      STUB
+
+      io.flush
+
+      stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, 'gems')
+
+      yield stub if block_given?
+
+      return stub
+    end
+  end
+
+  def stub_without_version
+    spec = File.join @gemhome, 'specifications', 'stub-2.gemspec'
+    open spec, 'w' do |io|
+      io.write <<-STUB
+# -*- (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]