Przeglądaj źródła

Does not start keyboard manager if there is no tty

Signed-off-by: Joana Hrotko <[email protected]>
Joana Hrotko 1 rok temu
rodzic
commit
ff20b641c7
3 zmienionych plików z 26 dodań i 21 usunięć
  1. 14 5
      cmd/compose/up.go
  2. 1 6
      cmd/formatter/shortcut.go
  3. 11 10
      pkg/compose/up.go

+ 14 - 5
cmd/compose/up.go

@@ -79,6 +79,16 @@ func (opts upOptions) apply(project *types.Project, services []string) (*types.P
 	return project, nil
 }
 
+func (opts *upOptions) validateNavigationMenu(dockerCli command.Cli, experimentals *experimental.State) {
+	if !dockerCli.Out().IsTerminal() {
+		opts.navigationMenu = false
+		return
+	}
+	if !opts.navigationMenuChanged {
+		opts.navigationMenu = SetUnchangedOption(ComposeMenu, experimentals.NavBar())
+	}
+}
+
 func upCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service, experiments *experimental.State) *cobra.Command {
 	up := upOptions{}
 	create := createOptions{}
@@ -100,7 +110,10 @@ func upCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service, ex
 			if len(up.attach) != 0 && up.attachDependencies {
 				return errors.New("cannot combine --attach and --attach-dependencies")
 			}
-			return runUp(ctx, dockerCli, backend, experiments, create, up, build, project, services)
+
+			up.validateNavigationMenu(dockerCli, experiments)
+
+			return runUp(ctx, dockerCli, backend, create, up, build, project, services)
 		}),
 		ValidArgsFunction: completeServiceNames(dockerCli, p),
 	}
@@ -170,7 +183,6 @@ func runUp(
 	ctx context.Context,
 	dockerCli command.Cli,
 	backend api.Service,
-	experimentals *experimental.State,
 	createOptions createOptions,
 	upOptions upOptions,
 	buildOptions buildOptions,
@@ -190,9 +202,6 @@ func runUp(
 	if err != nil {
 		return err
 	}
-	if !upOptions.navigationMenuChanged {
-		upOptions.navigationMenu = SetUnchangedOption(ComposeMenu, experimentals.NavBar())
-	}
 
 	var build *api.BuildOptions
 	if !createOptions.noBuild {

+ 1 - 6
cmd/formatter/shortcut.go

@@ -275,10 +275,6 @@ func (lk *LogKeyboard) StartWatch(ctx context.Context, project *types.Project, o
 	}
 }
 
-func (lk *LogKeyboard) KeyboardClose() {
-	_ = keyboard.Close()
-}
-
 func (lk *LogKeyboard) HandleKeyEvents(event keyboard.KeyEvent, ctx context.Context, project *types.Project, options api.UpOptions) {
 	switch kRune := event.Rune; kRune {
 	case 'v':
@@ -288,8 +284,7 @@ func (lk *LogKeyboard) HandleKeyEvents(event keyboard.KeyEvent, ctx context.Cont
 	}
 	switch key := event.Key; key {
 	case keyboard.KeyCtrlC:
-		lk.KeyboardClose()
-
+		_ = keyboard.Close()
 		lk.clearNavigationMenu()
 		ShowCursor()
 

+ 11 - 10
pkg/compose/up.go

@@ -31,6 +31,7 @@ import (
 	"github.com/docker/compose/v2/pkg/progress"
 	"github.com/eiannone/keyboard"
 	"github.com/hashicorp/go-multierror"
+	"github.com/sirupsen/logrus"
 )
 
 func (s *composeService) Up(ctx context.Context, project *types.Project, options api.UpOptions) error { //nolint:gocyclo
@@ -90,20 +91,20 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
 		}
 
 		var kEvents <-chan keyboard.KeyEvent
-		isWatchConfigured := s.shouldWatch(project)
-		isDockerDesktopActive := s.isDesktopIntegrationActive()
-
-		tracing.KeyboardMetrics(ctx, options.Start.NavigationMenu, isDockerDesktopActive, isWatchConfigured)
 		if options.Start.NavigationMenu {
 			kEvents, err = keyboard.GetKeys(100)
 			if err != nil {
-				panic(err)
-			}
-			formatter.NewKeyboardManager(ctx, isDockerDesktopActive, isWatchConfigured, signalChan, s.Watch)
-			if options.Start.Watch {
-				formatter.KeyboardManager.StartWatch(ctx, project, options)
+				logrus.Warn("could not start menu, an error occurred while starting.")
+			} else {
+				isWatchConfigured := s.shouldWatch(project)
+				isDockerDesktopActive := s.isDesktopIntegrationActive()
+				tracing.KeyboardMetrics(ctx, options.Start.NavigationMenu, isDockerDesktopActive, isWatchConfigured)
+
+				formatter.NewKeyboardManager(ctx, isDockerDesktopActive, isWatchConfigured, signalChan, s.Watch)
+				if options.Start.Watch {
+					formatter.KeyboardManager.StartWatch(ctx, project, options)
+				}
 			}
-			defer formatter.KeyboardManager.KeyboardClose()
 		}
 		for {
 			select {