I found some cases where duplicate resources weren't correctly skipped, but I couldn't get the test to really demonstrate them.
The code at least is demonstrated to work, anyway. Signed-off-by: Luke Kanies <[email protected]> --- lib/puppet/transaction.rb | 9 ++++----- spec/unit/transaction.rb | 1 + 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb index 80e0d49..1f4cb3e 100644 --- a/lib/puppet/transaction.rb +++ b/lib/puppet/transaction.rb @@ -349,19 +349,18 @@ class Transaction end return [] unless made made = [made] unless made.is_a?(Array) - made.uniq! - made.each do |res| + made.uniq.find_all do |res| begin @catalog.add_resource(res) do |r| r.finish make_parent_child_relationship(resource, [r]) end + true rescue Puppet::Resource::Catalog::DuplicateResourceError - made.delete(res) - next + res.info "Duplicate generated resource; skipping" + false end end - made end # Collect any dynamically generated resources. This method is called diff --git a/spec/unit/transaction.rb b/spec/unit/transaction.rb index 2589f7f..37870f1 100755 --- a/spec/unit/transaction.rb +++ b/spec/unit/transaction.rb @@ -47,6 +47,7 @@ describe Puppet::Transaction do @catalog.expects(:add_resource).raises(Puppet::Resource::Catalog::DuplicateResourceError.new("foo")) resource.expects(:finish).never + resource.expects(:info) # log that it's skipped @transaction.generate_additional_resources(generator, :generate).should be_empty end -- 1.6.1 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
