func (cmd *Push) createAppSetFromContextAndManifest(contextApp models.AppParams, manifestApps []models.AppParams) ([]models.AppParams, error) { var err error var apps []models.AppParams switch len(manifestApps) { case 0: if contextApp.Name == nil { return nil, errors.New( T("Incorrect Usage. The push command requires an app name. The app name can be supplied as an argument or with a manifest.yml file.") + "\n\n" + commandregistry.Commands.CommandUsage("push"), ) } err = addApp(&apps, contextApp) case 1: manifestApps[0].Merge(&contextApp) err = addApp(&apps, manifestApps[0]) default: selectedAppName := contextApp.Name contextApp.Name = nil if !contextApp.IsEmpty() { return nil, errors.New(T("Incorrect Usage. Command line flags (except -f) cannot be applied when pushing multiple apps from a manifest file.")) } if selectedAppName != nil { var foundApp bool for _, appParams := range manifestApps { if appParams.Name != nil && *appParams.Name == *selectedAppName { foundApp = true err = addApp(&apps, appParams) } } if !foundApp { err = errors.New(T("Could not find app named '{{.AppName}}' in manifest", map[string]interface{}{"AppName": *selectedAppName})) } } else { for _, manifestApp := range manifestApps { err = addApp(&apps, manifestApp) } } } if err != nil { return nil, errors.New(T("Error: {{.Err}}", map[string]interface{}{"Err": err.Error()})) } return apps, nil }