Browse Source

don't put enabled services in the disabled slice

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 4 năm trước cách đây
mục cha
commit
fada87ca19
4 tập tin đã thay đổi với 68 bổ sung55 xóa
  1. 5 1
      cli/cmd/compose/pull.go
  2. 5 1
      cli/cmd/compose/run.go
  3. 56 52
      cli/cmd/compose/up.go
  4. 2 1
      cli/cmd/compose/up_test.go

+ 5 - 1
cli/cmd/compose/pull.go

@@ -64,7 +64,11 @@ func runPull(ctx context.Context, opts pullOptions, services []string) error {
 		if err != nil {
 			return err
 		}
-		project.DisabledServices = append(project.DisabledServices, project.Services...)
+		for _, s := range project.Services {
+			if !contains(services, s.Name) {
+				project.DisabledServices = append(project.DisabledServices, s)
+			}
+		}
 		project.Services = enabled
 	}
 

+ 5 - 1
cli/cmd/compose/run.go

@@ -93,7 +93,11 @@ func runRun(ctx context.Context, opts runOptions) error {
 		if err != nil {
 			return err
 		}
-		project.DisabledServices = append(project.DisabledServices, project.Services...)
+		for _, s := range project.Services {
+			if s.Name != opts.Service {
+				project.DisabledServices = append(project.DisabledServices, s)
+			}
+		}
 		project.Services = types.Services{enabled}
 	}
 

+ 56 - 52
cli/cmd/compose/up.go

@@ -19,6 +19,12 @@ package compose
 import (
 	"context"
 	"fmt"
+	"github.com/docker/compose-cli/api/client"
+	"github.com/docker/compose-cli/api/compose"
+	"github.com/docker/compose-cli/api/context/store"
+	"github.com/docker/compose-cli/api/progress"
+	"github.com/docker/compose-cli/cli/cmd"
+	"github.com/docker/compose-cli/cli/formatter"
 	"os"
 	"os/signal"
 	"path/filepath"
@@ -27,13 +33,6 @@ import (
 	"syscall"
 	"time"
 
-	"github.com/docker/compose-cli/api/client"
-	"github.com/docker/compose-cli/api/compose"
-	"github.com/docker/compose-cli/api/context/store"
-	"github.com/docker/compose-cli/api/progress"
-	"github.com/docker/compose-cli/cli/cmd"
-	"github.com/docker/compose-cli/cli/formatter"
-
 	"github.com/compose-spec/compose-go/types"
 	"github.com/sirupsen/logrus"
 	"github.com/spf13/cobra"
@@ -89,6 +88,54 @@ func (o upOptions) dependenciesRecreateStrategy() string {
 	return compose.RecreateDiverged
 }
 
+func (opts upOptions) apply(project *types.Project, services []string) error {
+	if opts.noDeps {
+		enabled, err := project.GetServices(services...)
+		if err != nil {
+			return err
+		}
+		for _, s := range project.Services {
+			if !contains(services, s.Name) {
+				project.DisabledServices = append(project.DisabledServices, s)
+			}
+		}
+		project.Services = enabled
+	}
+
+	if opts.exitCodeFrom != "" {
+		_, err := project.GetService(opts.exitCodeFrom)
+		if err != nil {
+			return err
+		}
+	}
+
+	if opts.timeChanged {
+		timeoutValue := types.Duration(time.Duration(opts.timeout) * time.Second)
+		for i, s := range project.Services {
+			s.StopGracePeriod = &timeoutValue
+			project.Services[i] = s
+		}
+	}
+
+	for _, scale := range opts.scale {
+		split := strings.Split(scale, "=")
+		if len(split) != 2 {
+			return fmt.Errorf("invalid --scale option %q. Should be SERVICE=NUM", scale)
+		}
+		name := split[0]
+		replicas, err := strconv.Atoi(split[1])
+		if err != nil {
+			return err
+		}
+		err = setServiceScale(project, name, replicas)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
 func upCommand(p *projectOptions, contextType string) *cobra.Command {
 	opts := upOptions{
 		composeOptions: &composeOptions{
@@ -157,7 +204,7 @@ func runUp(ctx context.Context, opts upOptions, services []string) error {
 		return err
 	}
 
-	err = applyScaleOpt(opts.scale, project)
+	err = opts.apply(project, services)
 	if err != nil {
 		return err
 	}
@@ -176,35 +223,11 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro
 		return err
 	}
 
-	if opts.noDeps {
-		enabled, err := project.GetServices(services...)
-		if err != nil {
-			return err
-		}
-		project.DisabledServices = append(project.DisabledServices, project.Services...)
-		project.Services = enabled
-	}
-
-	err = applyScaleOpt(opts.scale, project)
+	err = opts.apply(project, services)
 	if err != nil {
 		return err
 	}
 
-	if opts.exitCodeFrom != "" {
-		_, err := project.GetService(opts.exitCodeFrom)
-		if err != nil {
-			return err
-		}
-	}
-
-	if opts.timeChanged {
-		timeoutValue := types.Duration(time.Duration(opts.timeout) * time.Second)
-		for i, s := range project.Services {
-			s.StopGracePeriod = &timeoutValue
-			project.Services[i] = s
-		}
-	}
-
 	_, err = progress.Run(ctx, func(ctx context.Context) (string, error) {
 		err := c.ComposeService().Create(ctx, project, compose.CreateOptions{
 			Services:             services,
@@ -282,25 +305,6 @@ func runCreateStart(ctx context.Context, opts upOptions, services []string) erro
 	return err
 }
 
-func applyScaleOpt(opts []string, project *types.Project) error {
-	for _, scale := range opts {
-		split := strings.Split(scale, "=")
-		if len(split) != 2 {
-			return fmt.Errorf("invalid --scale option %q. Should be SERVICE=NUM", scale)
-		}
-		name := split[0]
-		replicas, err := strconv.Atoi(split[1])
-		if err != nil {
-			return err
-		}
-		err = setServiceScale(project, name, replicas)
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
 func setServiceScale(project *types.Project, name string, replicas int) error {
 	for i, s := range project.Services {
 		if s.Name == name {

+ 2 - 1
cli/cmd/compose/up_test.go

@@ -34,7 +34,8 @@ func TestApplyScaleOpt(t *testing.T) {
 			},
 		},
 	}
-	err := applyScaleOpt([]string{"foo=2"}, &p)
+	opt := upOptions{scale: []string{"foo=2"}}
+	err := opt.apply(&p, nil)
 	assert.NilError(t, err)
 	foo, err := p.GetService("foo")
 	assert.NilError(t, err)