From 86f25f472685658fc0f29489ea551fec89b469d7 Mon Sep 17 00:00:00 2001 From: Samuel Giddins Date: Fri, 6 Jan 2017 18:05:55 -0600 Subject: Update vendored Molinillo to 0.5.5 --- .../vendor/molinillo/lib/molinillo/dependency_graph.rb | 4 +++- .../lib/molinillo/dependency_graph/detach_vertex_named.rb | 11 +++++++++-- .../vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb | 2 ++ lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb | 2 +- lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb | 11 +++++------ 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb index 28d237482d..dc090097ca 100644 --- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb @@ -119,6 +119,7 @@ module Bundler::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 Bundler::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 Bundler::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/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb index fdb6f102b3..d20b2cb0e0 100644 --- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb @@ -14,16 +14,23 @@ module Bundler::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/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb index 14d4957a91..7881c087c9 100644 --- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb @@ -81,6 +81,7 @@ module Bundler::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 Bundler::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/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb b/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb index 7b3065236b..4f5d450f59 100644 --- a/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +++ b/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Bundler::Molinillo # The version of Bundler::Molinillo. - VERSION = '0.5.4'.freeze + VERSION = '0.5.5'.freeze end diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb b/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb index da1ac5aef0..9054a4ae14 100644 --- a/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +++ b/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb @@ -366,13 +366,12 @@ module Bundler::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) -- cgit v1.2.1