Explorar el Código

detect terminal is not a `console.File` to avoid a panic

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof hace 2 años
padre
commit
18a112e88c
Se han modificado 2 ficheros con 10 adiciones y 4 borrados
  1. 1 1
      go.mod
  2. 9 3
      pkg/progress/writer.go

+ 1 - 1
go.mod

@@ -58,7 +58,7 @@ require (
 	github.com/bugsnag/bugsnag-go v1.5.0 // indirect
 	github.com/cenkalti/backoff/v4 v4.1.2 // indirect
 	github.com/cespare/xxhash/v2 v2.1.2 // indirect
-	github.com/cloudflare/cfssl v1.4.1 // indirect
+	github.com/cloudflare/cfssl v1.4.1
 	github.com/containerd/continuity v0.3.0 // indirect
 	github.com/containerd/ttrpc v1.1.1 // indirect
 	github.com/containerd/typeurl v1.0.2 // indirect

+ 9 - 3
pkg/progress/writer.go

@@ -21,6 +21,7 @@ import (
 	"io"
 	"sync"
 
+	"github.com/cloudflare/cfssl/log"
 	"github.com/docker/compose/v2/pkg/api"
 
 	"github.com/containerd/console"
@@ -118,11 +119,16 @@ func NewWriter(ctx context.Context, out io.Writer, progressTitle string) (Writer
 	if !ok {
 		dryRun = false
 	}
-	if Mode == ModeAuto && isTerminal {
-		return newTTYWriter(out.(console.File), dryRun, progressTitle)
+	f, isConsole := out.(console.File) // see https://github.com/docker/compose/issues/10560
+	if Mode == ModeAuto && isTerminal && isConsole {
+		return newTTYWriter(f, dryRun, progressTitle)
 	}
 	if Mode == ModeTTY {
-		return newTTYWriter(out.(console.File), dryRun, progressTitle)
+		if !isConsole {
+			log.Warning("Terminal is not a POSIX console")
+		} else {
+			return newTTYWriter(f, dryRun, progressTitle)
+		}
 	}
 	return &plainWriter{
 		out:    out,