summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/metatype/instances.rb5
-rw-r--r--lib/puppet/server/servlet.rb15
-rwxr-xr-xtest/types/type.rb14
3 files changed, 29 insertions, 5 deletions
diff --git a/lib/puppet/metatype/instances.rb b/lib/puppet/metatype/instances.rb
index 9e953a1dd..a26c30686 100644
--- a/lib/puppet/metatype/instances.rb
+++ b/lib/puppet/metatype/instances.rb
@@ -24,9 +24,9 @@ class Puppet::Type
raise Puppet::DevError, "must pass a Puppet::Type object"
end
- if exobj = @objects.has_key?(name) and self.isomorphic?
+ if exobj = @objects[name] and self.isomorphic?
msg = "Object '%s[%s]' already exists" %
- [name, newobj.class.name]
+ [newobj.class.name, name]
if exobj.file and exobj.line
msg += ("in file %s at line %s" %
@@ -37,6 +37,7 @@ class Puppet::Type
[object.file, object.line])
end
error = Puppet::Error.new(msg)
+ raise error
else
#Puppet.info("adding %s of type %s to class list" %
# [name,object.class])
diff --git a/lib/puppet/server/servlet.rb b/lib/puppet/server/servlet.rb
index 136bbb933..d562078e1 100644
--- a/lib/puppet/server/servlet.rb
+++ b/lib/puppet/server/servlet.rb
@@ -137,16 +137,25 @@ class Server
rescue Puppet::Error => detail
#Puppet.warning obj.inspect
#Puppet.warning args.inspect
+ if Puppet[:trace]
+ puts detail.backtrace
+ end
Puppet.err detail.to_s
- raise XMLRPC::FaultException.new(
+ error = XMLRPC::FaultException.new(
1, detail.to_s
)
+ error.set_backtrace = detail.backtrace
+ raise error
rescue => detail
#Puppet.warning obj.inspect
#Puppet.warning args.inspect
- puts detail.inspect
+ if Puppet[:trace]
+ puts detail.backtrace
+ end
Puppet.err "Could not call: %s" % detail.to_s
- raise XMLRPC::FaultException.new(1, detail.to_s)
+ error = XMLRPC::FaultException.new(1, detail.to_s)
+ error.set_backtrace detail.backtrace
+ raise error
end
}
end
diff --git a/test/types/type.rb b/test/types/type.rb
index 2add25db3..2438503c8 100755
--- a/test/types/type.rb
+++ b/test/types/type.rb
@@ -784,6 +784,20 @@ end
assert(hash[param], "Hash did not include %s" % param)
end
end
+
+ # Make sure that classes behave like hashes.
+ def test_class_hash_behaviour
+ path = tempfile()
+
+ filetype = Puppet::Type.type(:file)
+ one = Puppet::Type.newfile :path => path
+
+ assert_equal(one, filetype[path], "Did not get file back")
+
+ assert_raise(Puppet::Error) do
+ filetype[path] = one
+ end
+ end
end
# $Id$