summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Wolfe <jes5199@gmail.com>2010-05-22 17:58:44 -0700
committertest branch <puppet-dev@googlegroups.com>2010-02-17 06:50:53 -0800
commit2a73b5d194a5237722840844588a03addedf2d4c (patch)
tree6a65357dfb01f961d07791edd486af15686c0133
parent7952af5b80331f60d9f3703e63285fc7fb733a8c (diff)
downloadpuppet-2a73b5d194a5237722840844588a03addedf2d4c.tar.gz
puppet-2a73b5d194a5237722840844588a03addedf2d4c.tar.xz
puppet-2a73b5d194a5237722840844588a03addedf2d4c.zip
[#3674] Part 2: Autoloader load method should propagate failures
Change Autoloader's load to re-raise exceptions that happen when trying to load files, rather than just warning. This version still does not raise an error if the file is not found, as doing so would change the behavior of 'load' pretty significantly, but I am ambivalent this.
-rw-r--r--lib/puppet/util/autoload.rb7
-rw-r--r--lib/puppet/util/autoload/file_cache.rb14
-rwxr-xr-xspec/unit/util/autoload.rb17
3 files changed, 6 insertions, 32 deletions
diff --git a/lib/puppet/util/autoload.rb b/lib/puppet/util/autoload.rb
index 006554d5a..a1c44cdd6 100644
--- a/lib/puppet/util/autoload.rb
+++ b/lib/puppet/util/autoload.rb
@@ -74,8 +74,6 @@ class Puppet::Util::Autoload
# Load a single plugin by name. We use 'load' here so we can reload a
# given plugin.
def load(name,env=nil)
- return false if named_file_missing?(name)
-
path = name.to_s + ".rb"
searchpath(env).each do |dir|
@@ -90,11 +88,10 @@ class Puppet::Util::Autoload
raise
rescue Exception => detail
puts detail.backtrace if Puppet[:trace]
- warn "Could not autoload #{name}: #{detail}"
- return named_file_is_missing(name)
+ raise Puppet::Error, "Could not autoload #{name}: #{detail}"
end
end
- return named_file_is_missing(name)
+ false
end
# Mark the named object as loaded. Note that this supports unqualified
diff --git a/lib/puppet/util/autoload/file_cache.rb b/lib/puppet/util/autoload/file_cache.rb
index 4ad0c7f39..881e08637 100644
--- a/lib/puppet/util/autoload/file_cache.rb
+++ b/lib/puppet/util/autoload/file_cache.rb
@@ -73,20 +73,6 @@ module Puppet::Util::Autoload::FileCache
missing_files[path] = Time.now
end
- def named_file_missing?(name)
- @named_files ||= {}
- if time = @named_files[name] and ! data_expired?(time)
- return true
- end
- false
- end
-
- def named_file_is_missing(name)
- @named_files ||= {}
- @named_files[name] = Time.now
- false
- end
-
private
def cached_data?(path, type = nil)
diff --git a/spec/unit/util/autoload.rb b/spec/unit/util/autoload.rb
index 1b8866246..0f73a73d7 100755
--- a/spec/unit/util/autoload.rb
+++ b/spec/unit/util/autoload.rb
@@ -72,26 +72,17 @@ describe Puppet::Util::Autoload do
end
[RuntimeError, LoadError, SyntaxError].each do |error|
- it "should not die an if a #{error.to_s} exception is thrown" do
+ it "should die with Puppet::Error if a #{error.to_s} exception is thrown" do
@autoload.stubs(:file_exist?).returns true
Kernel.expects(:load).raises error
- @autoload.load("foo")
+ lambda { @autoload.load("foo") }.should raise_error(Puppet::Error)
end
end
- it "should skip files that it knows are missing" do
- @autoload.expects(:named_file_missing?).with("foo").returns true
- @autoload.expects(:eachdir).never
-
- @autoload.load("foo")
- end
-
- it "should register that files are missing if they cannot be found" do
- @autoload.load("foo")
-
- @autoload.should be_named_file_missing("foo")
+ it "should not raise an error if the file is missing" do
+ @autoload.load("foo").should == false
end
it "should register loaded files with the main loaded file list so they are not reloaded by ruby" do