summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Roberts <Markus@reality.com>2009-12-29 11:29:09 -0800
committerJames Turnbull <james@lovedthanlost.net>2009-12-31 17:55:20 +1100
commit7e2e12be7827c2adb64a192b5b7176c7c541af44 (patch)
treea982203effddaff3250e3a012584b1a1a49c5386
parentc84186ab0736a8e1379294546159d8f6cfec6894 (diff)
Fix for #2995 (don't fail to load PSON when UTF-8 missing)
We don't actually rely on iconv's UTF-8 support, so its absence shouldn't cause the PSON feature to fail on system (e.g. HPUX) where it isn't fully implemented. This change exposed a dependency on library load order that was causing Puppet::Util::Log to raise an error. I've removed the dependency of Puppet::Type from Puppet::Util::Log. Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
-rw-r--r--lib/puppet/util/log.rb28
-rw-r--r--lib/puppet/util/log_paths.rb14
-rwxr-xr-xspec/unit/parameter.rb8
-rwxr-xr-xspec/unit/type.rb9
-rwxr-xr-xspec/unit/util/log.rb14
5 files changed, 55 insertions, 18 deletions
diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb
index 4cdad700c..90d722900 100644
--- a/lib/puppet/util/log.rb
+++ b/lib/puppet/util/log.rb
@@ -511,11 +511,16 @@ class Puppet::Util::Log
# If they pass a source in to us, we make sure it is a string, and
# we retrieve any tags we can.
def source=(source)
- # We can't store the actual source, we just store the path.
- # We can't just check for whether it responds to :path, because
- # plenty of providers respond to that in their normal function.
- if (source.is_a?(Puppet::Type) or source.is_a?(Puppet::Parameter)) and source.respond_to?(:path)
- set_source_from_ral(source)
+ if source.respond_to?(:source_descriptors)
+ descriptors = source.source_descriptors
+ @source = descriptors[:path]
+
+ descriptors[:tags].each { |t| tag(t) }
+
+ [:file, :line, :version].each do |param|
+ next unless descriptors[param]
+ send(param.to_s + "=", descriptors[param])
+ end
else
@source = source.to_s
end
@@ -528,19 +533,6 @@ class Puppet::Util::Log
def to_s
return @message
end
-
- private
-
- def set_source_from_ral(source)
- @source = source.path
-
- source.tags.each { |t| tag(t) }
-
- [:file, :line, :version].each do |param|
- next unless value = source.send(param)
- send(param.to_s + "=", value)
- end
- end
end
# This is for backward compatibility from when we changed the constant to Puppet::Util::Log
diff --git a/lib/puppet/util/log_paths.rb b/lib/puppet/util/log_paths.rb
index 1a6bafc45..46f6c481d 100644
--- a/lib/puppet/util/log_paths.rb
+++ b/lib/puppet/util/log_paths.rb
@@ -11,5 +11,19 @@ module Puppet::Util::LogPaths
return "/" + @path.join("/")
end
+
+ def source_descriptors
+ descriptors = {}
+
+ descriptors[:tags] = tags
+
+ [:path, :file, :line, :version].each do |param|
+ next unless value = send(param)
+ descriptors[param] = value
+ end
+
+ return descriptors
+ end
+
end
diff --git a/spec/unit/parameter.rb b/spec/unit/parameter.rb
index 0548346b3..e3eaca6ac 100755
--- a/spec/unit/parameter.rb
+++ b/spec/unit/parameter.rb
@@ -44,6 +44,14 @@ describe Puppet::Parameter do
@parameter.tags.should == %w{one two foo}
end
+ it "should provide source_descriptors" do
+ @resource.expects(:line).returns 10
+ @resource.expects(:file).returns "file"
+ @resource.expects(:tags).returns %w{one two}
+ @resource.expects(:version).returns 50
+ @parameter.source_descriptors.should == {:tags=>["one", "two", "foo"], :path=>"//foo", :version=>50, :file => "file", :line => 10}
+ end
+
describe "when returning the value" do
it "should return nil if no value is set" do
@parameter.value.should be_nil
diff --git a/spec/unit/type.rb b/spec/unit/type.rb
index fe2788ec6..11bedaaa2 100755
--- a/spec/unit/type.rb
+++ b/spec/unit/type.rb
@@ -89,6 +89,15 @@ describe Puppet::Type do
Puppet::Type.type(:mount).new(:name => "foo").version.should == 0
end
+ it "should provide source_descriptors" do
+ resource = Puppet::Type.type(:mount).new(:name => "foo")
+ catalog = Puppet::Resource::Catalog.new
+ catalog.version = 50
+ catalog.add_resource resource
+
+ resource.source_descriptors.should == {:version=>50, :tags=>["mount", "foo"], :path=>"/Mount[foo]"}
+ end
+
describe "when choosing a default provider" do
it "should choose the provider with the highest specificity" do
# Make a fake type
diff --git a/spec/unit/util/log.rb b/spec/unit/util/log.rb
index 35e6a71e8..97fb2f297 100755
--- a/spec/unit/util/log.rb
+++ b/spec/unit/util/log.rb
@@ -157,6 +157,20 @@ describe Puppet::Util::Log do
end
end
+ it "should use the source_descriptors" do
+ source = stub "source"
+ source.stubs(:source_descriptors).returns(:tags => ["tag","tag2"], :path => "path", :version => 100)
+
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo)
+ log.expects(:tag).with("tag")
+ log.expects(:tag).with("tag2")
+ log.expects(:version=).with(100)
+
+ log.source = source
+
+ log.source.should == "path"
+ end
+
it "should copy over any version information" do
catalog = Puppet::Resource::Catalog.new
catalog.version = 25