summaryrefslogtreecommitdiff
path: root/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
diff options
context:
space:
mode:
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.rb11
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)