diff options
| -rw-r--r-- | CHANGELOG | 3 | ||||
| -rw-r--r-- | lib/puppet/parser/compile.rb | 3 | ||||
| -rwxr-xr-x | spec/unit/parser/compile.rb | 15 |
3 files changed, 20 insertions, 1 deletions
@@ -1,3 +1,6 @@ + Fixed #971 -- classes can once again be included multiple + times. + Added builtin support for Nagios types using Naginator to parse and generate the files. diff --git a/lib/puppet/parser/compile.rb b/lib/puppet/parser/compile.rb index fdd0cbcf2..c065e3f38 100644 --- a/lib/puppet/parser/compile.rb +++ b/lib/puppet/parser/compile.rb @@ -122,9 +122,12 @@ class Puppet::Parser::Compile classes.each do |name| # If we can find the class, then make a resource that will evaluate it. if klass = scope.findclass(name) + found << name and next if class_scope(klass) + # Create a resource to model this class, and then add it to the list # of resources. resource = Puppet::Parser::Resource.new(:type => "class", :title => klass.classname, :scope => scope, :source => scope.source) + store_resource(scope, resource) # If they've disabled lazy evaluation (which the :include function does), diff --git a/spec/unit/parser/compile.rb b/spec/unit/parser/compile.rb index 2ae99b5fd..092bece0c 100755 --- a/spec/unit/parser/compile.rb +++ b/spec/unit/parser/compile.rb @@ -106,7 +106,7 @@ describe Puppet::Parser::Compile, " when evaluating found classes" do @class = stub 'class', :classname => "my::class" @scope.stubs(:findclass).with("myclass").returns(@class) - @resource = mock 'resource' + @resource = stub 'resource', :ref => 'Class[myclass]' end it "should create a resource for each found class" do @@ -156,6 +156,19 @@ describe Puppet::Parser::Compile, " when evaluating found classes" do @compile.evaluate_classes(%w{myclass}, @scope, false) end + it "should skip classes that have already been evaluated" do + @compile.catalog.stubs(:tag) + + @compile.expects(:class_scope).with(@class).returns("something") + + @compile.expects(:store_resource).never + + @resource.expects(:evaluate).never + + Puppet::Parser::Resource.expects(:new).never + @compile.evaluate_classes(%w{myclass}, @scope, false) + end + it "should return the list of found classes" do @compile.catalog.stubs(:tag) |
