[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35

test branch puppet-dev at googlegroups.com
Wed Jul 14 10:31:56 UTC 2010


The following commit has been merged in the upstream branch:
commit 4f907c66ab3ee973323ef8a14bc5192bcc78967b
Author: Luke Kanies <luke at reductivelabs.com>
Date:   Mon Jan 25 17:56:50 2010 -0800

    TypeCollection now supports namespace arrays
    
    We previously only supported a single namespace when searching for
    resource types et al, but the whole system actually relies on
    an array of namespaces and search paths, so this adds
    that functionality all the way down, as it were.
    
    Signed-off-by: Luke Kanies <luke at reductivelabs.com>

diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index b79b344..bb87250 100644
--- a/lib/puppet/parser/scope.rb
+++ b/lib/puppet/parser/scope.rb
@@ -22,6 +22,7 @@ class Puppet::Parser::Scope
     attr_accessor :base, :keyword, :nodescope
     attr_accessor :top, :translated, :compiler
     attr_accessor :parent
+    attr_reader :namespaces
 
     # A demeterific shortcut to the catalog.
     def catalog
@@ -86,21 +87,11 @@ class Puppet::Parser::Scope
     end
 
     def find_hostclass(name)
-        @namespaces.each do |namespace|
-            if r = known_resource_types.find_hostclass(namespace, name)
-                return r
-            end
-        end
-        return nil
+        known_resource_types.find_hostclass(namespaces, name)
     end
 
     def find_definition(name)
-        @namespaces.each do |namespace|
-            if r = known_resource_types.find_definition(namespace, name)
-                return r
-            end
-        end
-        return nil
+        known_resource_types.find_definition(namespaces, name)
     end
 
     def findresource(string, name = nil)
diff --git a/lib/puppet/resource/type_collection.rb b/lib/puppet/resource/type_collection.rb
index 7ca95b1..a0bd2dd 100644
--- a/lib/puppet/resource/type_collection.rb
+++ b/lib/puppet/resource/type_collection.rb
@@ -75,24 +75,31 @@ class Puppet::Resource::TypeCollection
         @definitions[munge_name(name)]
     end
 
-    def find(namespace, name, type)
+    def find(namespaces, name, type)
         if r = find_fully_qualified(name, type)
             return r
         end
 
-        ary = namespace.split("::")
+        namespaces = Array(namespaces)
 
-        while ary.length > 0
-            tmp_namespace = ary.join("::")
-            if r = find_partially_qualified(tmp_namespace, name, type)
-                return r
+        namespaces.each do |namespace|
+            ary = namespace.split("::")
+
+            while ary.length > 0
+                tmp_namespace = ary.join("::")
+                if r = find_partially_qualified(tmp_namespace, name, type)
+                    return r
+                end
+
+                # Delete the second to last object, which reduces our namespace by one.
+                ary.pop
             end
 
-            # Delete the second to last object, which reduces our namespace by one.
-            ary.pop
+            if result = send(type, name)
+                return result
+            end
         end
-
-        send(type, name)
+        nil
     end
 
     def find_node(name)
diff --git a/spec/unit/resource/type_collection.rb b/spec/unit/resource/type_collection.rb
index 2fc364d..3de5e50 100644
--- a/spec/unit/resource/type_collection.rb
+++ b/spec/unit/resource/type_collection.rb
@@ -127,14 +127,21 @@ describe Puppet::Resource::TypeCollection do
             loader.find("namespace", "::foo::bar", :hostclass).should be_nil
         end
 
-        it "should return the partially qualified object if it exists in the provided namespace" do
+        it "should return the partially qualified object if it exists in a provided namespace" do
             loader = Puppet::Resource::TypeCollection.new("env")
             instance = Puppet::Resource::Type.new(:hostclass, "foo::bar::baz")
             loader.add instance
             loader.find("foo", "bar::baz", :hostclass).should equal(instance)
         end
 
-        it "should return the unqualified object if it exists in the provided namespace" do
+        it "should be able to find partially qualified objects in any of the provided namespaces" do
+            loader = Puppet::Resource::TypeCollection.new("env")
+            instance = Puppet::Resource::Type.new(:hostclass, "foo::bar::baz")
+            loader.add instance
+            loader.find(["nons", "foo", "otherns"], "bar::baz", :hostclass).should equal(instance)
+        end
+
+        it "should return the unqualified object if it exists in a provided namespace" do
             loader = Puppet::Resource::TypeCollection.new("env")
             instance = Puppet::Resource::Type.new(:hostclass, "foo::bar")
             loader.add instance

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list