From db2e27bab68f5f79c2ba212c8a173b6c485c8bea Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 2 Feb 2013 17:12:46 -0800 Subject: [PATCH] Initial plugin command plugin --- plugins/commands/plugin/command/root.rb | 56 +++++++++++++++++++++++++ plugins/commands/plugin/plugin.rb | 18 ++++++++ 2 files changed, 74 insertions(+) create mode 100644 plugins/commands/plugin/command/root.rb create mode 100644 plugins/commands/plugin/plugin.rb diff --git a/plugins/commands/plugin/command/root.rb b/plugins/commands/plugin/command/root.rb new file mode 100644 index 000000000..bb10557d5 --- /dev/null +++ b/plugins/commands/plugin/command/root.rb @@ -0,0 +1,56 @@ +require 'optparse' + +module VagrantPlugins + module CommandPlugin + module Command + class Root < Vagrant.plugin("2", :command) + def initialize(argv, env) + super + + @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv) + + @subcommands = Vagrant::Registry.new + end + + def execute + if @main_args.include?("-h") || @main_args.include?("--help") + # Print the help for all the sub-commands. + return help + end + + # If we reached this far then we must have a subcommand. If not, + # then we also just print the help and exit. + command_class = @subcommands.get(@sub_command.to_sym) if @sub_command + return help if !command_class || !@sub_command + @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}") + + # Initialize and execute the command class + command_class.new(@sub_args, @env).execute + end + + # Prints the help out for this command + def help + opts = OptionParser.new do |o| + o.banner = "Usage: vagrant plugin []" + o.separator "" + o.separator "Available subcommands:" + + # Add the available subcommands as separators in order to print them + # out as well. + keys = [] + @subcommands.each { |key, value| keys << key.to_s } + + keys.sort.each do |key| + o.separator " #{key}" + end + + o.separator "" + o.separator "For help on any individual command run `vagrant plugin COMMAND -h`" + end + + @env.ui.info(opts.help, :prefix => false) + end + end + end + end +end diff --git a/plugins/commands/plugin/plugin.rb b/plugins/commands/plugin/plugin.rb new file mode 100644 index 000000000..4739cfab1 --- /dev/null +++ b/plugins/commands/plugin/plugin.rb @@ -0,0 +1,18 @@ +require "vagrant" + +module VagrantPlugins + module CommandPlugin + class Plugin < Vagrant.plugin("2") + name "plugin command" + description <<-DESC + This command helps manage and install plugins within the + Vagrant environment. +DESC + + command("plugin") do + require File.expand_path("../command/root", __FILE__) + Command::Root + end + end + end +end