github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/application/files.go (about) 1 package application 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api/app_files" 5 "github.com/cloudfoundry/cli/cf/command_registry" 6 "github.com/cloudfoundry/cli/cf/configuration/core_config" 7 . "github.com/cloudfoundry/cli/cf/i18n" 8 "github.com/cloudfoundry/cli/cf/requirements" 9 "github.com/cloudfoundry/cli/cf/terminal" 10 "github.com/cloudfoundry/cli/flags" 11 "github.com/cloudfoundry/cli/flags/flag" 12 ) 13 14 type Files struct { 15 ui terminal.UI 16 config core_config.Reader 17 appFilesRepo app_files.AppFilesRepository 18 appReq requirements.ApplicationRequirement 19 } 20 21 func init() { 22 command_registry.Register(&Files{}) 23 } 24 25 func (cmd *Files) MetaData() command_registry.CommandMetadata { 26 fs := make(map[string]flags.FlagSet) 27 fs["i"] = &cliFlags.IntFlag{Name: "i", Usage: T("Instance")} 28 29 return command_registry.CommandMetadata{ 30 Name: "files", 31 ShortName: "f", 32 Description: T("Print out a list of files in a directory or the contents of a specific file"), 33 Usage: T("CF_NAME files APP_NAME [PATH] [-i INSTANCE]"), 34 Flags: fs, 35 } 36 } 37 38 func (cmd *Files) Requirements(requirementsFactory requirements.Factory, c flags.FlagContext) (reqs []requirements.Requirement, err error) { 39 if len(c.Args()) < 1 { 40 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("files")) 41 } 42 43 cmd.appReq = requirementsFactory.NewApplicationRequirement(c.Args()[0]) 44 45 reqs = []requirements.Requirement{ 46 requirementsFactory.NewLoginRequirement(), 47 requirementsFactory.NewTargetedSpaceRequirement(), 48 cmd.appReq, 49 } 50 return 51 } 52 53 func (cmd *Files) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 54 cmd.ui = deps.Ui 55 cmd.config = deps.Config 56 cmd.appFilesRepo = deps.RepoLocator.GetAppFilesRepository() 57 return cmd 58 } 59 60 func (cmd *Files) Execute(c flags.FlagContext) { 61 app := cmd.appReq.GetApplication() 62 63 var instance int 64 if c.IsSet("i") { 65 instance = c.Int("i") 66 if instance < 0 { 67 cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be a positive integer", 68 map[string]interface{}{ 69 "Instance": instance, 70 })) 71 } 72 if instance >= app.InstanceCount { 73 cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", 74 map[string]interface{}{ 75 "Instance": instance, 76 "InstanceCount": app.InstanceCount, 77 })) 78 } 79 } 80 81 cmd.ui.Say(T("Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 82 map[string]interface{}{ 83 "AppName": terminal.EntityNameColor(app.Name), 84 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 85 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 86 "Username": terminal.EntityNameColor(cmd.config.Username())})) 87 88 path := "/" 89 if len(c.Args()) > 1 { 90 path = c.Args()[1] 91 } 92 93 list, apiErr := cmd.appFilesRepo.ListFiles(app.Guid, instance, path) 94 if apiErr != nil { 95 cmd.ui.Failed(apiErr.Error()) 96 return 97 } 98 99 cmd.ui.Ok() 100 cmd.ui.Say("") 101 102 if list == "" { 103 cmd.ui.Say("No files found") 104 } else { 105 cmd.ui.Say("%s", list) 106 } 107 }