summaryrefslogtreecommitdiffstats
path: root/lib/puppet/pgraph.rb
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-01-23 13:49:32 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2007-01-23 13:49:32 +0000
commitc285d7af0eea29e787eb889d393145da72402b56 (patch)
tree029348f6d15952429d9400c6693f3c59187b3e9b /lib/puppet/pgraph.rb
parent9720a9764155b707126c2254fab3fa4d2516b352 (diff)
downloadpuppet-c285d7af0eea29e787eb889d393145da72402b56.tar.gz
puppet-c285d7af0eea29e787eb889d393145da72402b56.tar.xz
puppet-c285d7af0eea29e787eb889d393145da72402b56.zip
Fixing #437. Transactions now check whether graphs are cyclic, with a somewhat-useful error message if they are.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2079 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/pgraph.rb')
-rw-r--r--lib/puppet/pgraph.rb15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/puppet/pgraph.rb b/lib/puppet/pgraph.rb
index 393f88449..894a8fe03 100644
--- a/lib/puppet/pgraph.rb
+++ b/lib/puppet/pgraph.rb
@@ -50,6 +50,21 @@ class Puppet::PGraph < GRATR::Digraph
end
end
+ # Fail in a somewhat informative way if the graph has become cyclic.
+ def check_cycle
+ sorted = topsort()
+ return true if sorted.size == size()
+
+ bad = []
+ vertices.each do |v|
+ bad << v unless sorted.include?(v)
+ end
+
+ raise Puppet::Error, "Found cycle involving %s" % bad.collect do |v|
+ v.to_s
+ end.join(", ")
+ end
+
# Which resources a given resource depends upon.
def dependents(resource)
tree_from_vertex2(resource).keys