diff options
Diffstat (limited to 'lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb')
-rw-r--r-- | lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb | 11 |
1 files changed, 9 insertions, 2 deletions
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) |