require "vagrant/plugin/manager" module VagrantPlugins module CommandPlugin module Action # This middleware removes user installed plugins by # removing: # * ~/.vagrant.d/plugins.json # * ~/.vagrant.d/gems # Usage should be restricted to when a repair is # unsuccessful and the only reasonable option remaining # is to re-install all plugins class ExpungePlugins def initialize(app, env) @app = app end def call(env) if !env[:force] result = nil attempts = 0 while attempts < 5 && result.nil? attempts += 1 result = env[:ui].ask( I18n.t("vagrant.commands.plugin.expunge_confirm") + " [N]: " ) result = result.to_s.downcase.strip result = "n" if result.empty? if !["y", "yes", "n", "no"].include?(result) result = nil env[:ui].error("Please answer Y or N") else result = result[0,1] end end if result != 'y' abort_action = true end end if !abort_action plugins_json = File.join(env[:home_path], "plugins.json") plugins_gems = env[:gems_path] if File.exist?(plugins_json) FileUtils.rm(plugins_json) end if File.directory?(plugins_gems) FileUtils.rm_rf(plugins_gems) end env[:ui].info(I18n.t("vagrant.commands.plugin.expunge_complete")) @app.call(env) else env[:ui].info(I18n.t("vagrant.commands.plugin.expunge_aborted")) end end end end end end