From: Markus Roberts <[email protected]> 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 <[email protected]> --- lib/puppet/external/pson/pure.rb | 2 +- lib/puppet/util/log.rb | 28 ++++++++++------------------ lib/puppet/util/log_paths.rb | 14 ++++++++++++++ spec/unit/parameter.rb | 8 ++++++++ spec/unit/type.rb | 9 +++++++++ spec/unit/util/log.rb | 14 ++++++++++++++ 6 files changed, 56 insertions(+), 19 deletions(-) diff --git a/lib/puppet/external/pson/pure.rb b/lib/puppet/external/pson/pure.rb index 7bb18aa..53d1ea2 100644 --- a/lib/puppet/external/pson/pure.rb +++ b/lib/puppet/external/pson/pure.rb @@ -50,7 +50,7 @@ module PSON UTF16toUTF8 = swapper.new(UTF16toUTF8) # :nodoc: end rescue Errno::EINVAL, Iconv::InvalidEncoding - raise MissingUnicodeSupport, "iconv doesn't seem to support UTF-8/UTF-16 conversions" + Puppet.warning "iconv doesn't seem to support UTF-8/UTF-16 conversions" ensure $VERBOSE = old_verbose end diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb index 4cdad70..90d7229 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 1a6bafc..46f6c48 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 0548346..e3eaca6 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 fe2788e..11bedaa 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 35e6a71..97fb2f2 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 -- 1.6.5 -- 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.
