From 3f005ffe52c15b72a4f08d720abe3d7b885b038a Mon Sep 17 00:00:00 2001 From: John Howard Date: Tue, 24 May 2016 13:03:13 -0700 Subject: [PATCH] Windows: run -it not crash in ISE Signed-off-by: John Howard Upstream-commit: 486a1a03d86a679740d79c2ef5e2a9574342f8c3 Component: engine --- .../engine/pkg/term/windows/ansi_reader.go | 1 + .../engine/pkg/term/windows/ansi_writer.go | 17 +---------- components/engine/pkg/term/windows/windows.go | 28 +++++++++++++++++++ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/components/engine/pkg/term/windows/ansi_reader.go b/components/engine/pkg/term/windows/ansi_reader.go index 5b91b78342..1db920db12 100644 --- a/components/engine/pkg/term/windows/ansi_reader.go +++ b/components/engine/pkg/term/windows/ansi_reader.go @@ -28,6 +28,7 @@ type ansiReader struct { } func newAnsiReader(nFile int) *ansiReader { + initLogger() file, fd := winterm.GetStdFile(nFile) return &ansiReader{ file: file, diff --git a/components/engine/pkg/term/windows/ansi_writer.go b/components/engine/pkg/term/windows/ansi_writer.go index 9f3232c093..0299a8842e 100644 --- a/components/engine/pkg/term/windows/ansi_writer.go +++ b/components/engine/pkg/term/windows/ansi_writer.go @@ -3,16 +3,12 @@ package windows import ( - "io/ioutil" "os" ansiterm "github.com/Azure/go-ansiterm" "github.com/Azure/go-ansiterm/winterm" - "github.com/Sirupsen/logrus" ) -var logger *logrus.Logger - // ansiWriter wraps a standard output file (e.g., os.Stdout) providing ANSI sequence translation. type ansiWriter struct { file *os.File @@ -25,18 +21,7 @@ type ansiWriter struct { } func newAnsiWriter(nFile int) *ansiWriter { - logFile := ioutil.Discard - - if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" { - logFile, _ = os.Create("ansiReaderWriter.log") - } - - logger = &logrus.Logger{ - Out: logFile, - Formatter: new(logrus.TextFormatter), - Level: logrus.DebugLevel, - } - + initLogger() file, fd := winterm.GetStdFile(nFile) info, err := winterm.GetConsoleScreenBufferInfo(fd) if err != nil { diff --git a/components/engine/pkg/term/windows/windows.go b/components/engine/pkg/term/windows/windows.go index bf4c7b5025..ce4cb5990e 100644 --- a/components/engine/pkg/term/windows/windows.go +++ b/components/engine/pkg/term/windows/windows.go @@ -3,3 +3,31 @@ // and return pseudo-streams that convert ANSI sequences to / from Windows Console API calls. package windows + +import ( + "io/ioutil" + "os" + "sync" + + ansiterm "github.com/Azure/go-ansiterm" + "github.com/Sirupsen/logrus" +) + +var logger *logrus.Logger +var initOnce sync.Once + +func initLogger() { + initOnce.Do(func() { + logFile := ioutil.Discard + + if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" { + logFile, _ = os.Create("ansiReaderWriter.log") + } + + logger = &logrus.Logger{ + Out: logFile, + Formatter: new(logrus.TextFormatter), + Level: logrus.DebugLevel, + } + }) +}