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  }