diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-12-13 16:40:12 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-12-13 16:40:12 +0000 |
commit | ab604527648e91b84529c3fb83761b5e9b269b77 (patch) | |
tree | ae37547f9ca127bd41d305ab58b2b3ff2e1959bc /lib/puppet | |
parent | 3937aa3519652612899b5d22e3f99ffb9aa8c40c (diff) | |
download | puppet-ab604527648e91b84529c3fb83761b5e9b269b77.tar.gz puppet-ab604527648e91b84529c3fb83761b5e9b269b77.tar.xz puppet-ab604527648e91b84529c3fb83761b5e9b269b77.zip |
Fixing the next round of bugs, mostly little things but I had to modify transactions so they are willing to delete implicit resources even if they have dependencies, else we would often not be able to purge files at all.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1917 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/pgraph.rb | 9 | ||||
-rw-r--r-- | lib/puppet/transaction.rb | 12 | ||||
-rw-r--r-- | lib/puppet/type.rb | 2 |
3 files changed, 19 insertions, 4 deletions
diff --git a/lib/puppet/pgraph.rb b/lib/puppet/pgraph.rb index a8ff952ed..e7247418c 100644 --- a/lib/puppet/pgraph.rb +++ b/lib/puppet/pgraph.rb @@ -20,10 +20,15 @@ class Puppet::PGraph < GRATR::Digraph @edge_number.clear end end + + # Which resources a given resource depends upon. + def dependents(resource) + tree_from_vertex(resource, :dfs).keys + end - # The dependencies for a given resource. + # The which resources depend upon the given resource. def dependencies(resource) - tree_from_vertex(resource, :dfs).keys + reversal.tree_from_vertex(resource, :dfs).keys end # Override this method to use our class instead. diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb index 99b03b435..67d016c15 100644 --- a/lib/puppet/transaction.rb +++ b/lib/puppet/transaction.rb @@ -44,6 +44,16 @@ class Transaction # And then return return [] end + + # If a resource is going to be deleted but it still has dependencies, then + # don't delete it unless it's implicit. + if ! resource.implicit? and deps = @relgraph.dependents(resource) and ! deps.empty? and changes.detect { |change| + change.state.name == :ensure and change.should == :absent + } + resource.warning "%s still depend%s on me -- not deleting" % + [deps.collect { |r| r.ref }.join(","), if deps.length > 1; ""; else "s"; end] + return [] + end unless changes.is_a? Array changes = [changes] @@ -237,7 +247,7 @@ class Transaction # enough to check the immediate dependencies, which is why we use # a tree from the reversed graph. skip = false - @relgraph.reversal.tree_from_vertex(resource, :dfs).keys.each do |dep| + @relgraph.dependencies(resource).each do |dep| if fails = failed?(dep) resource.notice "Dependency %s[%s] has %s failures" % [dep.class.name, dep.name, @failures[dep]] diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index 2c99e3343..e55f9f5ae 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -334,7 +334,7 @@ class Type < Puppet::Element # Return the "type[name]" style reference. def ref - "%s[%s]" % [self.class.name, self.title] + "%s[%s]" % [self.class.name.to_s.capitalize, self.title] end # Retrieve the title of an object. If no title was set separately, |