Просмотр исходного кода

watch: enable tar-based syncer by default (#10877)

Swap the default implementation now that batching is merged.
Keeping the `docker cp` based implementation around for the
moment, but it needs to be _explicitly_ disabled now by setting
`COMPOSE_EXPERIMENTAL_WATCH_TAR=0`.

After the next release, we should remove the `docker cp`
implementation entirely.

Signed-off-by: Milas Bowman <[email protected]>
Milas Bowman 2 лет назад
Родитель
Сommit
fd8ab2f7ac
2 измененных файлов с 20 добавлено и 11 удалено
  1. 18 8
      pkg/compose/watch.go
  2. 2 3
      pkg/e2e/watch_test.go

+ 18 - 8
pkg/compose/watch.go

@@ -67,22 +67,32 @@ type fileEvent struct {
 	Action WatchAction
 }
 
+// getSyncImplementation returns the the tar-based syncer unless it has been explicitly
+// disabled with `COMPOSE_EXPERIMENTAL_WATCH_TAR=0`. Note that the absence of the env
+// var means enabled.
+func (s *composeService) getSyncImplementation(project *types.Project) sync.Syncer {
+	var useTar bool
+	if useTarEnv, ok := os.LookupEnv("COMPOSE_EXPERIMENTAL_WATCH_TAR"); ok {
+		useTar, _ = strconv.ParseBool(useTarEnv)
+	} else {
+		useTar = true
+	}
+	if useTar {
+		return sync.NewTar(project.Name, tarDockerClient{s: s})
+	}
+
+	return sync.NewDockerCopy(project.Name, s, s.stdinfo())
+}
+
 func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, _ api.WatchOptions) error { //nolint: gocyclo
 	_, err := s.prepareProjectForBuild(project, nil)
 	if err != nil {
 		return err
 	}
-	var syncer sync.Syncer
-	if useTar, _ := strconv.ParseBool(os.Getenv("COMPOSE_EXPERIMENTAL_WATCH_TAR")); useTar {
-		syncer = sync.NewTar(project.Name, tarDockerClient{s: s})
-	} else {
-		syncer = sync.NewDockerCopy(project.Name, s, s.stdinfo())
-	}
-
 	if err := project.ForServices(services); err != nil {
 		return err
 	}
-
+	syncer := s.getSyncImplementation(project)
 	eg, ctx := errgroup.WithContext(ctx)
 	watching := false
 	for i := range project.Services {

+ 2 - 3
pkg/e2e/watch_test.go

@@ -20,6 +20,7 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
+	"strconv"
 	"strings"
 	"sync/atomic"
 	"testing"
@@ -73,9 +74,7 @@ func doTest(t *testing.T, svcName string, tarSync bool) {
 	env := []string{
 		"COMPOSE_FILE=" + composeFilePath,
 		"COMPOSE_PROJECT_NAME=" + projName,
-	}
-	if tarSync {
-		env = append(env, "COMPOSE_EXPERIMENTAL_WATCH_TAR=1")
+		"COMPOSE_EXPERIMENTAL_WATCH_TAR=" + strconv.FormatBool(tarSync),
 	}
 
 	cli := NewCLI(t, WithEnv(env...))