plugins/commands/plugin/command/install.rb in vagrant-unbundled-2.1.2.0 vs plugins/commands/plugin/command/install.rb in vagrant-unbundled-2.1.4.0

- old
+ new

@@ -7,36 +7,76 @@ module CommandPlugin module Command class Install < Base include MixinInstallOpts + LOCAL_INSTALL_PAUSE = 3 + def execute options = { verbose: false } opts = OptionParser.new do |o| o.banner = "Usage: vagrant plugin install <name>... [-h]" o.separator "" build_install_opts(o, options) + o.on("--local", "Install plugin for local project only") do |l| + options[:env_local] = l + end + o.on("--verbose", "Enable verbose output for plugin installation") do |v| options[:verbose] = v end end # Parse the options argv = parse_options(opts) return if !argv - raise Vagrant::Errors::CLIInvalidUsage, help: opts.help.chomp if argv.length < 1 - # Install the gem - argv.each do |name| - action(Action.action_install, { - plugin_entry_point: options[:entry_point], - plugin_version: options[:plugin_version], - plugin_sources: options[:plugin_sources], - plugin_name: name, - plugin_verbose: options[:verbose] - }) + if argv.length < 1 + raise Vagrant::Errors::CLIInvalidUsage, help: opts.help.chomp if !options[:env_local] + + errors = @env.vagrantfile.config.vagrant.validate(nil) + if !errors["vagrant"].empty? + raise Errors::ConfigInvalid, + errors: Util::TemplateRenderer.render( + "config/validation_failed", + errors: errors) + end + + local_plugins = @env.vagrantfile.config.vagrant.plugins + plugin_list = local_plugins.map do |name, info| + "#{name} (#{info.fetch(:version, "> 0")})" + end.join("\n") + + + @env.ui.info(I18n.t("vagrant.plugins.local.install_all", + plugins: plugin_list) + "\n") + + # Pause to allow user to cancel + sleep(LOCAL_INSTALL_PAUSE) + + local_plugins.each do |name, info| + action(Action.action_install, + plugin_entry_point: info[:entry_point], + plugin_version: info[:version], + plugin_sources: info[:sources] || Vagrant::Bundler::DEFAULT_GEM_SOURCES.dup, + plugin_name: name, + plugin_env_local: true + ) + end + else + # Install the gem + argv.each do |name| + action(Action.action_install, + plugin_entry_point: options[:entry_point], + plugin_version: options[:plugin_version], + plugin_sources: options[:plugin_sources], + plugin_name: name, + plugin_verbose: options[:verbose], + plugin_env_local: options[:env_local] + ) + end end # Success, exit status 0 0 end