code.cloudfoundry.org/cli@v7.1.0+incompatible/command/v7/revisions_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strconv"
     5  
     6  	"code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/command/flag"
     8  	"code.cloudfoundry.org/cli/resources"
     9  	"code.cloudfoundry.org/cli/util/ui"
    10  )
    11  
    12  //go:generate counterfeiter . RevisionsActor
    13  
    14  type RevisionsActor interface {
    15  	GetRevisionsByApplicationNameAndSpace(appName string, spaceGUID string) ([]resources.Revision, v7action.Warnings, error)
    16  }
    17  
    18  type RevisionsCommand struct {
    19  	RequiredArgs flag.EnvironmentArgs `positional-args:"yes"`
    20  	usage        interface{}          `usage:"CF_NAME revisions APP_NAME"`
    21  
    22  	BaseCommand
    23  }
    24  
    25  func (cmd RevisionsCommand) Execute(_ []string) error {
    26  	err := cmd.SharedActor.CheckTarget(true, true)
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	user, err := cmd.Config.CurrentUser()
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	appName := cmd.RequiredArgs.AppName
    37  	cmd.UI.DisplayTextWithFlavor("Getting revisions for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    38  		"AppName":   appName,
    39  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    40  		"SpaceName": cmd.Config.TargetedSpace().Name,
    41  		"Username":  user.Name,
    42  	})
    43  
    44  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(appName, cmd.Config.TargetedSpace().GUID)
    45  	cmd.UI.DisplayWarnings(warnings)
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	appGUID := app.GUID
    51  	revisionsFeature, warnings, err := cmd.Actor.GetAppFeature(appGUID, "revisions")
    52  	cmd.UI.DisplayWarnings(warnings)
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	if !revisionsFeature.Enabled {
    58  		cmd.UI.DisplayWarning("Warning: Revisions for app '{{.AppName}}' are disabled. Updates to the app will not create new revisions.",
    59  			map[string]interface{}{
    60  				"AppName": appName,
    61  			})
    62  	}
    63  
    64  	cmd.UI.DisplayNewline()
    65  
    66  	revisions, warnings, err := cmd.Actor.GetRevisionsByApplicationNameAndSpace(
    67  		appName,
    68  		cmd.Config.TargetedSpace().GUID,
    69  	)
    70  	cmd.UI.DisplayWarnings(warnings)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	if len(revisions) == 0 {
    76  		cmd.UI.DisplayText("No revisions found")
    77  		return nil
    78  	}
    79  
    80  	table := [][]string{{
    81  		"revision",
    82  		"description",
    83  		"deployable",
    84  		"revision guid",
    85  		"created at",
    86  	}}
    87  	for _, revision := range revisions {
    88  		table = append(table,
    89  			[]string{strconv.Itoa(revision.Version),
    90  				revision.Description,
    91  				strconv.FormatBool(revision.Deployable),
    92  				revision.GUID,
    93  				revision.CreatedAt,
    94  			})
    95  	}
    96  
    97  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
    98  
    99  	return nil
   100  }