github.com/jasonkeene/cli@v6.14.1-0.20160816203908-ca5715166dfb+incompatible/cf/commands/plugin/plugins.go (about) 1 package plugin 2 3 import ( 4 "fmt" 5 "sort" 6 7 "github.com/cloudfoundry/cli/cf/commandregistry" 8 "github.com/cloudfoundry/cli/cf/configuration/pluginconfig" 9 "github.com/cloudfoundry/cli/cf/flags" 10 . "github.com/cloudfoundry/cli/cf/i18n" 11 "github.com/cloudfoundry/cli/cf/requirements" 12 "github.com/cloudfoundry/cli/cf/terminal" 13 "github.com/cloudfoundry/cli/utils" 14 ) 15 16 type Plugins struct { 17 ui terminal.UI 18 config pluginconfig.PluginConfiguration 19 } 20 21 func init() { 22 commandregistry.Register(&Plugins{}) 23 } 24 25 func (cmd *Plugins) MetaData() commandregistry.CommandMetadata { 26 fs := make(map[string]flags.FlagSet) 27 fs["checksum"] = &flags.BoolFlag{Name: "checksum", Usage: T("Compute and show the sha1 value of the plugin binary file")} 28 29 return commandregistry.CommandMetadata{ 30 Name: "plugins", 31 Description: T("List all available plugin commands"), 32 Usage: []string{ 33 T("CF_NAME plugins"), 34 }, 35 Flags: fs, 36 } 37 } 38 39 func (cmd *Plugins) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 40 usageReq := requirements.NewUsageRequirement(commandregistry.CLICommandUsagePresenter(cmd), 41 T("No argument required"), 42 func() bool { 43 return len(fc.Args()) != 0 44 }, 45 ) 46 47 reqs := []requirements.Requirement{ 48 usageReq, 49 } 50 return reqs, nil 51 } 52 53 func (cmd *Plugins) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 54 cmd.ui = deps.UI 55 cmd.config = deps.PluginConfig 56 return cmd 57 } 58 59 func (cmd *Plugins) Execute(c flags.FlagContext) error { 60 var version string 61 62 cmd.ui.Say(T("Listing Installed Plugins...")) 63 64 plugins := cmd.config.Plugins() 65 66 var table *terminal.UITable 67 if c.Bool("checksum") { 68 cmd.ui.Say(T("Computing sha1 for installed plugins, this may take a while ...")) 69 table = cmd.ui.Table([]string{T("Plugin Name"), T("Version"), T("Command Name"), "sha1", T("Command Help")}) 70 } else { 71 table = cmd.ui.Table([]string{T("Plugin Name"), T("Version"), T("Command Name"), T("Command Help")}) 72 } 73 74 var sortedPluginNames []string 75 for k := range plugins { 76 sortedPluginNames = append(sortedPluginNames, k) 77 } 78 sort.Strings(sortedPluginNames) 79 80 for _, pluginName := range sortedPluginNames { 81 metadata := plugins[pluginName] 82 if metadata.Version.Major == 0 && metadata.Version.Minor == 0 && metadata.Version.Build == 0 { 83 version = "N/A" 84 } else { 85 version = fmt.Sprintf("%d.%d.%d", metadata.Version.Major, metadata.Version.Minor, metadata.Version.Build) 86 } 87 88 for _, command := range metadata.Commands { 89 args := []string{pluginName, version} 90 91 if command.Alias != "" { 92 args = append(args, command.Name+", "+command.Alias) 93 } else { 94 args = append(args, command.Name) 95 } 96 97 if c.Bool("checksum") { 98 checksum := utils.NewSha1Checksum(metadata.Location) 99 sha1, err := checksum.ComputeFileSha1() 100 if err != nil { 101 args = append(args, "n/a") 102 } else { 103 args = append(args, fmt.Sprintf("%x", sha1)) 104 } 105 } 106 107 args = append(args, command.HelpText) 108 table.Add(args...) 109 } 110 } 111 112 cmd.ui.Ok() 113 cmd.ui.Say("") 114 115 err := table.Print() 116 if err != nil { 117 return err 118 } 119 return nil 120 }