github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/plugin/uninstall_plugin_command.go (about)

     1  package plugin
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/pluginaction"
     5  	"code.cloudfoundry.org/cli/command"
     6  	"code.cloudfoundry.org/cli/command/flag"
     7  	"code.cloudfoundry.org/cli/command/plugin/shared"
     8  	"code.cloudfoundry.org/cli/command/translatableerror"
     9  )
    10  
    11  //go:generate counterfeiter . UninstallPluginActor
    12  
    13  type UninstallPluginActor interface {
    14  	UninstallPlugin(uninstaller pluginaction.PluginUninstaller, name string) error
    15  }
    16  
    17  type UninstallPluginCommand struct {
    18  	RequiredArgs    flag.PluginName `positional-args:"yes"`
    19  	usage           interface{}     `usage:"CF_NAME uninstall-plugin PLUGIN-NAME"`
    20  	relatedCommands interface{}     `related_commands:"plugins"`
    21  
    22  	Config command.Config
    23  	UI     command.UI
    24  	Actor  UninstallPluginActor
    25  }
    26  
    27  func (cmd *UninstallPluginCommand) Setup(config command.Config, ui command.UI) error {
    28  	cmd.Config = config
    29  	cmd.UI = ui
    30  	cmd.Actor = pluginaction.NewActor(config, nil)
    31  	return nil
    32  }
    33  
    34  func (cmd UninstallPluginCommand) Execute(args []string) error {
    35  	pluginName := cmd.RequiredArgs.PluginName
    36  	plugin, exist := cmd.Config.GetPluginCaseInsensitive(pluginName)
    37  	if !exist {
    38  		return translatableerror.PluginNotFoundError{PluginName: pluginName}
    39  	}
    40  
    41  	cmd.UI.DisplayTextWithFlavor("Uninstalling plugin {{.PluginName}}...",
    42  		map[string]interface{}{
    43  			"PluginName": plugin.Name,
    44  		})
    45  
    46  	rpcService, err := shared.NewRPCService(cmd.Config, cmd.UI)
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	err = cmd.Actor.UninstallPlugin(rpcService, plugin.Name)
    52  	if err != nil {
    53  		switch e := err.(type) {
    54  		case pluginaction.PluginBinaryRemoveFailedError:
    55  			return translatableerror.PluginBinaryRemoveFailedError{
    56  				Err: e.Err,
    57  			}
    58  		case pluginaction.PluginExecuteError:
    59  			return translatableerror.PluginBinaryUninstallError{
    60  				Err: e.Err,
    61  			}
    62  		default:
    63  			return shared.HandleError(err)
    64  		}
    65  	}
    66  
    67  	cmd.UI.DisplayOK()
    68  	cmd.UI.DisplayText("Plugin {{.PluginName}} {{.PluginVersion}} successfully uninstalled.",
    69  		map[string]interface{}{
    70  			"PluginName":    plugin.Name,
    71  			"PluginVersion": plugin.Version,
    72  		})
    73  
    74  	return nil
    75  }