We were previously trying to figure out what data was available based on what methods existed, but that caught a different method profile from modules.
This fixes it so we only look for this data from Puppet::Type or Puppet::Parameter instances. I had to add the ability to skip data that's not available, since File's 'ensure' parameter doesn't have 'file' data, I assume because of the metaprogramming we do around the 'file' value for 'ensure'. It's a workaround for now, and there's a test in there to verify it, anyway. Signed-off-by: Luke Kanies <[email protected]> --- lib/puppet/util/log.rb | 23 ++++++++++++++--------- spec/unit/util/log.rb | 29 ++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb index 6edc7f4..d6d3ba0 100644 --- a/lib/puppet/util/log.rb +++ b/lib/puppet/util/log.rb @@ -515,18 +515,10 @@ class Puppet::Util::Log # 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) - @source = source.path + set_source_from_ral(source) else @source = source.to_s end - if source.respond_to?(:tags) - source.tags.each { |t| tag(t) } - end - - [:file, :line, :version].each do |param| - next unless source.respond_to?(param) - send(param.to_s + "=", source.send(param)) - end end def to_report @@ -536,6 +528,19 @@ 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 source.respond_to?(param) and 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/spec/unit/util/log.rb b/spec/unit/util/log.rb index 9d1b410..70309e4 100755 --- a/spec/unit/util/log.rb +++ b/spec/unit/util/log.rb @@ -112,7 +112,7 @@ describe Puppet::Util::Log do report.should be_include(log.time.to_s) end - describe "when setting the source" do + describe "when setting the source as a RAL object" do it "should tag itself with any tags the source has" do source = Puppet::Type.type(:file).new :path => "/foo/bar" log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source) @@ -121,6 +121,16 @@ describe Puppet::Util::Log do end end + it "should copy over any version information" do + catalog = Puppet::Resource::Catalog.new + catalog.version = 25 + source = Puppet::Type.type(:file).new :path => "/foo/bar" + catalog.add_resource source + + log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source) + log.version.should == 25 + end + it "should copy over any file and line information" do source = Puppet::Type.type(:file).new :path => "/foo/bar" source.file = "/my/file" @@ -130,14 +140,19 @@ describe Puppet::Util::Log do log.line.should == 50 end - it "should copy over any version information" do - catalog = Puppet::Resource::Catalog.new - catalog.version = 25 - source = Puppet::Type.type(:file).new :path => "/foo/bar" - catalog.add_resource source + it "should not fail when RAL objects don't actually support all of the metadata" do + file = Puppet::Type.type(:file).new :path => "/foo/bar", :ensure => :file + source = file.property(:ensure) + log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source) + log.file.should be_nil + end + end + describe "when setting the source as a non-RAL object" do + it "should not try to copy over file, version, line, or tag information" do + source = Puppet::Module.new("foo") + source.expects(:file).never log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source) - log.version.should == 25 end end 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 -~----------~----~----~----~------~----~------~--~---
