summaryrefslogtreecommitdiffstats
path: root/lib/puppet/application
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@puppetlabs.com>2011-05-31 15:02:41 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-05-31 15:26:41 -0700
commit618495c7b70671ff1da1653c76d1524ff3f615b7 (patch)
treee08c7ad4473a158e366625fcd56ad145522e7369 /lib/puppet/application
parent0d9eaea6fafe6bf57731a115d6a41c7ceacd8057 (diff)
downloadpuppet-618495c7b70671ff1da1653c76d1524ff3f615b7.tar.gz
puppet-618495c7b70671ff1da1653c76d1524ff3f615b7.tar.xz
puppet-618495c7b70671ff1da1653c76d1524ff3f615b7.zip
#7211: more helpful error messages in various cases.
We were emitting a bunch of unhelpful failure messages, surrounding invalid actions and especially default actions interacting with the command-line. This cleans those up, to give a helpful, informative, and correct message in all cases. Notably, we no longer report that there is no "default" action when you specify an unknown action on a face. This change revealed some other weaknesses in our unit tests, now correctly, that result in slightly more robust code.
Diffstat (limited to 'lib/puppet/application')
-rw-r--r--lib/puppet/application/face_base.rb26
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/puppet/application/face_base.rb b/lib/puppet/application/face_base.rb
index 7a5ce3400..2f07faae1 100644
--- a/lib/puppet/application/face_base.rb
+++ b/lib/puppet/application/face_base.rb
@@ -66,9 +66,9 @@ class Puppet::Application::FaceBase < Puppet::Application
# Now, walk the command line and identify the action. We skip over
# arguments based on introspecting the action and all, and find the first
# non-option word to use as the action.
- action = nil
- index = -1
- until @action or (index += 1) >= command_line.args.length do
+ action_name = nil
+ index = -1
+ until action_name or (index += 1) >= command_line.args.length do
item = command_line.args[index]
if item =~ /^-/ then
option = @face.options.find do |name|
@@ -96,7 +96,11 @@ class Puppet::Application::FaceBase < Puppet::Application
raise OptionParser::InvalidOption.new(item.sub(/=.*$/, ''))
end
else
- @action = @face.get_action(item.to_sym)
+ # Stash away the requested action name for later, and try to fetch the
+ # action object it represents; if this is an invalid action name that
+ # will be nil, and handled later.
+ action_name = item.to_sym
+ @action = @face.get_action(action_name)
end
end
@@ -104,8 +108,18 @@ class Puppet::Application::FaceBase < Puppet::Application
if @action = @face.get_default_action() then
@is_default_action = true
else
- Puppet.err "#{face.name} does not have a default action, and no action was given"
- Puppet.err Puppet::Face[:help, :current].help(@face.name)
+ # REVISIT: ...and this horror thanks to our log setup, which doesn't
+ # initialize destinations until the setup method, which we will never
+ # reach. We could also just print here, but that is actually a little
+ # uglier and nastier in the long term, in which we should do log setup
+ # earlier if at all possible. --daniel 2011-05-31
+ Puppet::Util::Log.newdestination(:console)
+
+ face = @face.name
+ action = action_name.nil? ? 'default' : "'#{action_name}'"
+ msg = "'#{face}' has no #{action} action. See `puppet help #{face}`."
+ Puppet.err(msg)
+
exit false
end
end