Merge pull request #11307 from glours/compose-go-immutable-projects

update compose-go to version using immutable Project functions
This commit is contained in:
Guillaume Lours
2024-01-11 14:11:12 +01:00
committed by GitHub
17 changed files with 59 additions and 45 deletions

View File

@@ -226,7 +226,7 @@ func (o *ProjectOptions) ToProject(dockerCli command.Cli, services []string, po
return nil, errors.New("project name can't be empty. Use `--project-name` to set a valid name")
}
err = project.EnableServices(services...)
project, err = project.WithServicesEnabled(services...)
if err != nil {
return nil, err
}
@@ -246,9 +246,9 @@ func (o *ProjectOptions) ToProject(dockerCli command.Cli, services []string, po
project.Services[name] = s
}
project.WithoutUnnecessaryResources()
project = project.WithoutUnnecessaryResources()
err = project.ForServices(services)
project, err = project.WithSelectedServices(services)
return project, err
}

View File

@@ -44,7 +44,7 @@ func TestFilterServices(t *testing.T) {
},
},
}
err := p.ForServices([]string{"bar"})
p, err := p.WithSelectedServices([]string{"bar"})
assert.NilError(t, err)
assert.Equal(t, len(p.Services), 2)

View File

@@ -159,10 +159,11 @@ func runServices(ctx context.Context, dockerCli command.Cli, opts configOptions)
if err != nil {
return err
}
return project.WithServices(project.ServiceNames(), func(s types.ServiceConfig) error {
fmt.Fprintln(dockerCli.Out(), s.Name)
err = project.ForEachService(project.ServiceNames(), func(serviceName string, _ *types.ServiceConfig) error {
fmt.Fprintln(dockerCli.Out(), serviceName)
return nil
})
return err
}
func runVolumes(ctx context.Context, dockerCli command.Cli, opts configOptions) error {

View File

@@ -72,11 +72,12 @@ func pullCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service)
return cmd
}
func (opts pullOptions) apply(project *types.Project, services []string) error {
func (opts pullOptions) apply(project *types.Project, services []string) (*types.Project, error) {
if !opts.includeDeps {
err := project.ForServices(services, types.IgnoreDependencies)
var err error
project, err = project.WithSelectedServices(services, types.IgnoreDependencies)
if err != nil {
return err
return nil, err
}
}
@@ -89,7 +90,7 @@ func (opts pullOptions) apply(project *types.Project, services []string) error {
project.Services[i] = service
}
}
return nil
return project, nil
}
func runPull(ctx context.Context, dockerCli command.Cli, backend api.Service, opts pullOptions, services []string) error {
@@ -98,7 +99,7 @@ func runPull(ctx context.Context, dockerCli command.Cli, backend api.Service, op
return err
}
err = opts.apply(project, services)
project, err = opts.apply(project, services)
if err != nil {
return err
}

View File

@@ -46,7 +46,7 @@ func TestApplyPullOptions(t *testing.T) {
},
},
}
err := pullOptions{
project, err := pullOptions{
policy: types.PullPolicyMissing,
}.apply(project, nil)
assert.NilError(t, err)

View File

@@ -60,7 +60,7 @@ func runPush(ctx context.Context, dockerCli command.Cli, backend api.Service, op
}
if !opts.IncludeDeps {
err := project.ForServices(services, types.IgnoreDependencies)
project, err = project.WithSelectedServices(services, types.IgnoreDependencies)
if err != nil {
return err
}

View File

@@ -62,7 +62,7 @@ func runRestart(ctx context.Context, dockerCli command.Cli, backend api.Service,
}
if project != nil && len(services) > 0 {
err := project.EnableServices(services...)
project, err = project.WithServicesEnabled(services...)
if err != nil {
return err
}

View File

@@ -66,17 +66,18 @@ type runOptions struct {
quietPull bool
}
func (options runOptions) apply(project *types.Project) error {
func (options runOptions) apply(project *types.Project) (*types.Project, error) {
if options.noDeps {
err := project.ForServices([]string{options.Service}, types.IgnoreDependencies)
var err error
project, err = project.WithSelectedServices([]string{options.Service}, types.IgnoreDependencies)
if err != nil {
return err
return nil, err
}
}
target, err := project.GetService(options.Service)
if err != nil {
return err
return nil, err
}
target.Tty = !options.noTty
@@ -91,7 +92,7 @@ func (options runOptions) apply(project *types.Project) error {
for _, p := range options.publish {
config, err := types.ParsePortConfig(p)
if err != nil {
return err
return nil, err
}
target.Ports = append(target.Ports, config...)
}
@@ -100,7 +101,7 @@ func (options runOptions) apply(project *types.Project) error {
for _, v := range options.volumes {
volume, err := format.ParseVolume(v)
if err != nil {
return err
return nil, err
}
target.Volumes = append(target.Volumes, volume)
}
@@ -111,7 +112,7 @@ func (options runOptions) apply(project *types.Project) error {
break
}
}
return nil
return project, nil
}
func runCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service) *cobra.Command {
@@ -210,7 +211,7 @@ func normalizeRunFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
}
func runRun(ctx context.Context, backend api.Service, project *types.Project, options runOptions, createOpts createOptions, buildOpts buildOptions, dockerCli command.Cli) error {
err := options.apply(project)
project, err := options.apply(project)
if err != nil {
return err
}

View File

@@ -67,7 +67,7 @@ func runScale(ctx context.Context, dockerCli command.Cli, backend api.Service, o
}
if opts.noDeps {
if err := project.ForServices(services, types.IgnoreDependencies); err != nil {
if project, err = project.WithSelectedServices(services, types.IgnoreDependencies); err != nil {
return err
}
}

View File

@@ -56,22 +56,23 @@ type upOptions struct {
waitTimeout int
}
func (opts upOptions) apply(project *types.Project, services []string) error {
func (opts upOptions) apply(project *types.Project, services []string) (*types.Project, error) {
if opts.noDeps {
err := project.ForServices(services, types.IgnoreDependencies)
var err error
project, err = project.WithSelectedServices(services, types.IgnoreDependencies)
if err != nil {
return err
return nil, err
}
}
if opts.exitCodeFrom != "" {
_, err := project.GetService(opts.exitCodeFrom)
if err != nil {
return err
return nil, err
}
}
return nil
return project, nil
}
func upCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service) *cobra.Command {
@@ -171,7 +172,7 @@ func runUp(
return err
}
err = upOptions.apply(project, services)
project, err = upOptions.apply(project, services)
if err != nil {
return err
}
@@ -229,9 +230,9 @@ func runUp(
if upOptions.attachDependencies {
dependencyOpt = types.IncludeDependencies
}
if err := project.WithServices(services, func(s types.ServiceConfig) error {
if err := project.ForEachService(services, func(serviceName string, s *types.ServiceConfig) error {
if s.Attach == nil || *s.Attach {
attachSet.Add(s.Name)
attachSet.Add(serviceName)
}
return nil
}, dependencyOpt); err != nil {