From 9a21c28426e1021afd0f4d7314d707d578f60256 Mon Sep 17 00:00:00 2001 From: hsbt Date: Sun, 30 Oct 2016 06:32:48 +0000 Subject: * lib/rubygems.rb, lib/rubygems/*, test/rubygems/*: Update rubygems to 2.6.8. Release note of 2.6.8: https://github.com/rubygems/rubygems/commit/9fb8880976f5ab998912898b091d88aa10eb1d4a git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56525 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- .../molinillo/lib/molinillo/dependency_graph.rb | 7 +++ .../lib/molinillo/dependency_graph/action.rb | 2 +- .../dependency_graph/add_edge_no_circular.rb | 4 +- .../lib/molinillo/dependency_graph/add_vertex.rb | 4 +- .../lib/molinillo/dependency_graph/delete_edge.rb | 62 ++++++++++++++++++++++ .../dependency_graph/detach_vertex_named.rb | 2 +- .../lib/molinillo/dependency_graph/log.rb | 13 ++++- .../lib/molinillo/dependency_graph/set_payload.rb | 4 +- .../lib/molinillo/dependency_graph/tag.rb | 4 +- .../molinillo/lib/molinillo/gem_metadata.rb | 2 +- .../resolver/molinillo/lib/molinillo/resolution.rb | 14 +++-- 11 files changed, 103 insertions(+), 15 deletions(-) create mode 100644 lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb (limited to 'lib/rubygems/resolver') diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb index 6189a717cd..40136eb894 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb @@ -182,6 +182,13 @@ module Gem::Resolver::Molinillo add_edge_no_circular(origin, destination, requirement) end + # Deletes an {Edge} from the dependency graph + # @param [Edge] edge + # @return [Void] + def delete_edge(edge) + log.delete_edge(self, edge.origin.name, edge.destination.name, edge.requirement) + end + # Sets the payload of the vertex with the given name # @param [String] name the name of the vertex # @param [Object] payload the payload diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb index dbf4b0b803..eeedabb069 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb @@ -7,7 +7,7 @@ module Gem::Resolver::Molinillo # rubocop:disable Lint/UnusedMethodArgument # @return [Symbol] The name of the action. - def self.name + def self.action_name raise 'Abstract' end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb index b2d569ddc9..b052e3a38e 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb @@ -7,8 +7,8 @@ module Gem::Resolver::Molinillo class AddEdgeNoCircular < Action # @!group Action - # (see Action.name) - def self.name + # (see Action.action_name) + def self.action_name :add_vertex end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb index e8b4278ba4..6cde933080 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb @@ -7,8 +7,8 @@ module Gem::Resolver::Molinillo class AddVertex < Action # :nodoc: # @!group Action - # (see Action.name) - def self.name + # (see Action.action_name) + def self.action_name :add_vertex end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb new file mode 100644 index 0000000000..d44aaf1f06 --- /dev/null +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true +require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action' +module Gem::Resolver::Molinillo + class DependencyGraph + # @!visibility private + # (see DependencyGraph#delete_edge) + class DeleteEdge < Action + # @!group Action + + # (see Action.action_name) + def self.action_name + :delete_edge + end + + # (see Action#up) + def up(graph) + edge = make_edge(graph) + edge.origin.outgoing_edges.delete(edge) + edge.destination.incoming_edges.delete(edge) + end + + # (see Action#down) + def down(graph) + edge = make_edge(graph) + edge.origin.outgoing_edges << edge + edge.destination.incoming_edges << edge + edge + end + + # @!group DeleteEdge + + # @return [String] the name of the origin of the edge + attr_reader :origin_name + + # @return [String] the name of the destination of the edge + attr_reader :destination_name + + # @return [Object] the requirement that the edge represents + attr_reader :requirement + + # @param [DependencyGraph] graph the graph to find vertices from + # @return [Edge] The edge this action adds + def make_edge(graph) + Edge.new( + graph.vertex_named(origin_name), + graph.vertex_named(destination_name), + requirement + ) + end + + # Initialize an action to add an edge to a dependency graph + # @param [String] origin_name the name of the origin of the edge + # @param [String] destination_name the name of the destination of the edge + # @param [Object] requirement the requirement that the edge represents + def initialize(origin_name, destination_name, requirement) + @origin_name = origin_name + @destination_name = destination_name + @requirement = requirement + end + end + end +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 59ef7d8c09..9ad34e8fe0 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 @@ -8,7 +8,7 @@ module Gem::Resolver::Molinillo # @!group Action # (see Action#name) - def self.name + def self.action_name :add_vertex end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb index 874c4480e3..5cdd84b5c1 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular' require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex' +require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge' require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named' require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload' require 'rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag' @@ -40,6 +41,16 @@ module Gem::Resolver::Molinillo push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement)) end + # {include:DependencyGraph#delete_edge} + # @param [Graph] graph the graph to perform the action on + # @param [String] origin_name + # @param [String] destination_name + # @param [Object] requirement + # @return (see DependencyGraph#delete_edge) + def delete_edge(graph, origin_name, destination_name, requirement) + push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement)) + end + # @macro action def set_payload(graph, name, payload) push_action(graph, SetPayload.new(name, payload)) @@ -92,7 +103,7 @@ module Gem::Resolver::Molinillo loop do action = pop!(graph) raise "No tag #{tag.inspect} found" unless action - break if action.class.name == :tag && action.tag == tag + break if action.class.action_name == :tag && action.tag == tag end end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb index 633bc64601..02cfba64a7 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb @@ -7,8 +7,8 @@ module Gem::Resolver::Molinillo class SetPayload < Action # :nodoc: # @!group Action - # (see Action.name) - def self.name + # (see Action.action_name) + def self.action_name :set_payload end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb index 808cd6a3d8..0cb08075ca 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb @@ -7,8 +7,8 @@ module Gem::Resolver::Molinillo class Tag < Action # @!group Action - # (see Action.name) - def self.name + # (see Action.action_name) + def self.action_name :tag end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb index 4170b00af0..c50fa77bd5 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.1'.freeze + VERSION = '0.5.3'.freeze end diff --git a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb index e6565119ef..54a6c3fc17 100644 --- a/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +++ b/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb @@ -356,10 +356,14 @@ module Gem::Resolver::Molinillo # @return [void] def fixup_swapped_children(vertex) payload = vertex.payload - dep_names = dependencies_for(payload).map(&method(:name_for)) - vertex.successors.each do |succ| - if !dep_names.include?(succ.name) && !succ.root? && succ.predecessors.to_a == [vertex] + deps = dependencies_for(payload).group_by(&method(:name_for)) + vertex.outgoing_edges.each do |outgoing_edge| + @parent_of[outgoing_edge.requirement] = states.size - 1 + succ = outgoing_edge.destination + matching_deps = Array(deps[succ.name]) + 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) @@ -368,7 +372,11 @@ module Gem::Resolver::Molinillo requirement_name = name_for(requirement) (requirement_name == succ.name) || all_successor_names.include?(requirement_name) 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 -- cgit v1.2.3