Add '--help' to any command to immediately get help for that command.
This commit is contained in:
parent
bbb1b70e1d
commit
c28195ed26
|
@ -50,22 +50,6 @@ module Vagrant
|
||||||
klass.dispatch(env, *args)
|
klass.dispatch(env, *args)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Prints out the list of supported commands and their descriptions (if
|
|
||||||
# available) then exits.
|
|
||||||
def puts_help
|
|
||||||
puts "Usage: vagrant SUBCOMMAND ...\n\n"
|
|
||||||
|
|
||||||
puts "Supported commands:"
|
|
||||||
subcommands.keys.sort.each do |key|
|
|
||||||
klass = subcommands[key]
|
|
||||||
next if klass.description.empty?
|
|
||||||
|
|
||||||
puts "#{' ' * 4}#{key.ljust(20)}#{klass.description}"
|
|
||||||
end
|
|
||||||
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
# Sets or reads the description, depending on if the value is set in the
|
# Sets or reads the description, depending on if the value is set in the
|
||||||
# parameter.
|
# parameter.
|
||||||
def description(value=nil)
|
def description(value=nil)
|
||||||
|
@ -92,7 +76,7 @@ module Vagrant
|
||||||
else
|
else
|
||||||
# Just print out the help, since this top-level command does nothing
|
# Just print out the help, since this top-level command does nothing
|
||||||
# on its own
|
# on its own
|
||||||
self.class.puts_help
|
show_help
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -122,6 +106,12 @@ module Vagrant
|
||||||
def option_parser(reload=false)
|
def option_parser(reload=false)
|
||||||
@option_parser = nil if reload
|
@option_parser = nil if reload
|
||||||
@option_parser ||= OptionParser.new do |opts|
|
@option_parser ||= OptionParser.new do |opts|
|
||||||
|
# The --help flag is available on all children commands, and will
|
||||||
|
# immediately show help.
|
||||||
|
opts.on("--help", "Show help for the current subcommand.") do
|
||||||
|
show_help
|
||||||
|
end
|
||||||
|
|
||||||
options_spec(opts)
|
options_spec(opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -156,6 +146,20 @@ module Vagrant
|
||||||
end
|
end
|
||||||
|
|
||||||
puts option_parser.help
|
puts option_parser.help
|
||||||
|
|
||||||
|
my_klass = self.class
|
||||||
|
if !my_klass.subcommands.empty?
|
||||||
|
puts "\nSupported subcommands:"
|
||||||
|
my_klass.subcommands.keys.sort.each do |key|
|
||||||
|
klass = my_klass.subcommands[key]
|
||||||
|
next if klass.description.empty?
|
||||||
|
|
||||||
|
puts "#{' ' * 8}#{key.ljust(20)}#{klass.description}"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "\nFor help on a specific subcommand, run `vagrant SUBCOMMAND --help`"
|
||||||
|
end
|
||||||
|
|
||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -67,13 +67,13 @@ class CommandsBaseTest < Test::Unit::TestCase
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "show version if flag is set" do
|
should "show version if flag is set" do
|
||||||
@instance.expects(:puts_version).once
|
@instance.expects(:puts_version).once
|
||||||
@instance.expects(:puts_help).never
|
@instance.expects(:show_help).never
|
||||||
@instance.execute(["--version"])
|
@instance.execute(["--version"])
|
||||||
end
|
end
|
||||||
|
|
||||||
should "just print the help by default" do
|
should "just print the help by default" do
|
||||||
@instance.expects(:puts_version).never
|
@instance.expects(:puts_version).never
|
||||||
@klass.expects(:puts_help)
|
@instance.expects(:show_help).once
|
||||||
@instance.execute([])
|
@instance.execute([])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -81,6 +81,8 @@ class CommandsBaseTest < Test::Unit::TestCase
|
||||||
context "getting the option parser" do
|
context "getting the option parser" do
|
||||||
should "create it with the options spec if it hasn't been created yet" do
|
should "create it with the options spec if it hasn't been created yet" do
|
||||||
opts = mock("opts")
|
opts = mock("opts")
|
||||||
|
opts.stubs(:on)
|
||||||
|
|
||||||
result = mock("result")
|
result = mock("result")
|
||||||
OptionParser.expects(:new).yields(opts).returns(result)
|
OptionParser.expects(:new).yields(opts).returns(result)
|
||||||
@instance.expects(:options_spec).with(opts)
|
@instance.expects(:options_spec).with(opts)
|
||||||
|
|
Loading…
Reference in New Issue