summaryrefslogtreecommitdiffstats
path: root/lib/puppet/util
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@puppetlabs.com>2011-04-12 16:14:02 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-04-12 16:14:02 -0700
commit40adee4ade3a447a7397a71d76e042091bbbfbff (patch)
treebb169ff744c7a10772a55770ef976ce4f0e82763 /lib/puppet/util
parent8778307ca33a637fe10b601ee737628f2e5f9fbf (diff)
parent7b4d9367b391f75983868046d30928ebc8411f50 (diff)
downloadpuppet-40adee4ade3a447a7397a71d76e042091bbbfbff.tar.gz
puppet-40adee4ade3a447a7397a71d76e042091bbbfbff.tar.xz
puppet-40adee4ade3a447a7397a71d76e042091bbbfbff.zip
Merge branch 'feature/next/6962-self-documenting-strings-actions-and-options' into next
Diffstat (limited to 'lib/puppet/util')
-rw-r--r--lib/puppet/util/command_line.rb42
1 files changed, 26 insertions, 16 deletions
diff --git a/lib/puppet/util/command_line.rb b/lib/puppet/util/command_line.rb
index 52b5f81ef..fa462ee2d 100644
--- a/lib/puppet/util/command_line.rb
+++ b/lib/puppet/util/command_line.rb
@@ -17,12 +17,12 @@ module Puppet
'master' => 'puppetmasterd'
)
- def initialize( zero = $0, argv = ARGV, stdin = STDIN )
+ def initialize(zero = $0, argv = ARGV, stdin = STDIN)
@zero = zero
@argv = argv.dup
@stdin = stdin
- @subcommand_name, @args = subcommand_and_args( @zero, @argv, @stdin )
+ @subcommand_name, @args = subcommand_and_args(@zero, @argv, @stdin)
Puppet::Plugins.on_commandline_initialization(:command_line_object => self)
end
@@ -33,19 +33,20 @@ module Puppet
File.join('puppet', 'application')
end
- def available_subcommands
- absolute_appdirs = $LOAD_PATH.collect do |x|
+ def self.available_subcommands
+ absolute_appdirs = $LOAD_PATH.collect do |x|
File.join(x,'puppet','application')
end.select{ |x| File.directory?(x) }
absolute_appdirs.inject([]) do |commands, dir|
commands + Dir[File.join(dir, '*.rb')].map{|fn| File.basename(fn, '.rb')}
end.uniq
end
-
- def usage_message
- usage = "Usage: puppet command <space separated arguments>"
- available = "Available commands are: #{available_subcommands.sort.join(', ')}"
- [usage, available].join("\n")
+ # available_subcommands was previously an instance method, not a class
+ # method, and we have an unknown number of user-implemented applications
+ # that depend on that behaviour. Forwarding allows us to preserve a
+ # backward compatible API. --daniel 2011-04-11
+ def available_subcommands
+ self.class.available_subcommands
end
def require_application(application)
@@ -53,15 +54,24 @@ module Puppet
end
def execute
- if subcommand_name.nil?
- puts usage_message
- elsif available_subcommands.include?(subcommand_name) #subcommand
+ if subcommand_name and available_subcommands.include?(subcommand_name) then
require_application subcommand_name
app = Puppet::Application.find(subcommand_name).new(self)
Puppet::Plugins.on_application_initialization(:appliation_object => self)
app.run
+ elsif execute_external_subcommand then
+ # Logically, we shouldn't get here, but we do, so whatever. We just
+ # return to the caller. How strange we are. --daniel 2011-04-11
else
- abort "Error: Unknown command #{subcommand_name}.\n#{usage_message}" unless execute_external_subcommand
+ unless subcommand_name.nil? then
+ puts "Error: Unknown Puppet subcommand #{subcommand_name}.\n"
+ end
+
+ # Doing this at the top of the file is natural, but causes puppet.rb
+ # to load too early, which causes things to break. This is a nasty
+ # thing, found in #7065. --daniel 2011-04-11
+ require 'puppet/faces/help'
+ puts Puppet::Faces[:help, :current].help
end
end
@@ -69,10 +79,10 @@ module Puppet
external_command = "puppet-#{subcommand_name}"
require 'puppet/util'
- path_to_subcommand = Puppet::Util.which( external_command )
+ path_to_subcommand = Puppet::Util.which(external_command)
return false unless path_to_subcommand
- system( path_to_subcommand, *args )
+ system(path_to_subcommand, *args)
true
end
@@ -82,7 +92,7 @@ module Puppet
private
- def subcommand_and_args( zero, argv, stdin )
+ def subcommand_and_args(zero, argv, stdin)
zero = File.basename(zero, '.rb')
if zero == 'puppet'