@@ -29,12 +29,14 @@ import (
2929
3030type projectOptions struct {
3131 ProjectName string
32+ Profiles []string
3233 ConfigPaths []string
3334 WorkingDir string
3435 EnvFile string
3536}
3637
3738func (o * projectOptions ) addProjectFlags (f * pflag.FlagSet ) {
39+ f .StringArrayVar (& o .Profiles , "profile" , []string {}, "Specify a profile to enable" )
3840 f .StringVarP (& o .ProjectName , "project-name" , "p" , "" , "Project name" )
3941 f .StringArrayVarP (& o .ConfigPaths , "file" , "f" , []string {}, "Compose configuration files" )
4042 f .StringVar (& o .EnvFile , "env-file" , "" , "Specify an alternate environment file." )
@@ -47,14 +49,14 @@ func (o *projectOptions) toProjectName() (string, error) {
4749 return o .ProjectName , nil
4850 }
4951
50- project , err := o .toProject ()
52+ project , err := o .toProject (nil )
5153 if err != nil {
5254 return "" , err
5355 }
5456 return project .Name , nil
5557}
5658
57- func (o * projectOptions ) toProject () (* types.Project , error ) {
59+ func (o * projectOptions ) toProject (services [] string ) (* types.Project , error ) {
5860 options , err := o .toProjectOptions ()
5961 if err != nil {
6062 return nil , err
@@ -64,7 +66,19 @@ func (o *projectOptions) toProject() (*types.Project, error) {
6466 if err != nil {
6567 return nil , err
6668 }
67- return project , nil
69+
70+ if len (services ) != 0 {
71+ s , err := project .GetServices (services )
72+ if err != nil {
73+ return nil , err
74+ }
75+ o .Profiles = append (o .Profiles , s .GetProfiles ()... )
76+ }
77+
78+ project .ApplyProfiles (o .Profiles )
79+
80+ err = project .ForServices (services )
81+ return project , err
6882}
6983
7084func (o * projectOptions ) toProjectOptions () (* cli.ProjectOptions , error ) {
@@ -114,40 +128,3 @@ func Command(contextType string) *cobra.Command {
114128 opts .addProjectFlags (command .PersistentFlags ())
115129 return command
116130}
117-
118- //
119- func filter (project * types.Project , services []string ) error {
120- if len (services ) == 0 {
121- // All services
122- return nil
123- }
124-
125- names := map [string ]bool {}
126- err := addServiceNames (project , services , names )
127- if err != nil {
128- return err
129- }
130- var filtered types.Services
131- for _ , s := range project .Services {
132- if _ , ok := names [s .Name ]; ok {
133- filtered = append (filtered , s )
134- }
135- }
136- project .Services = filtered
137- return nil
138- }
139-
140- func addServiceNames (project * types.Project , services []string , names map [string ]bool ) error {
141- for _ , name := range services {
142- names [name ] = true
143- service , err := project .GetService (name )
144- if err != nil {
145- return err
146- }
147- err = addServiceNames (project , service .GetDependencies (), names )
148- if err != nil {
149- return err
150- }
151- }
152- return nil
153- }
0 commit comments