From 4bc5e802dbecb27b383627165ee6f13594cd8008 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 13 Jun 2019 18:10:45 +0000 Subject: [PATCH] Revert "Use SIGWINCH to update terminal size" This reverts commit 49036be4076851c4ef2003339ffd1bf022dfc844. Reason for revert: TestSmartStatusOutputWidthChange is flaky Change-Id: Ie5231dbbab2887ce4c4697f3fe6e52cfd6f4dd17 --- ui/terminal/smart_status.go | 62 +++++++------------------------------ ui/terminal/status_test.go | 3 -- 2 files changed, 11 insertions(+), 54 deletions(-) diff --git a/ui/terminal/smart_status.go b/ui/terminal/smart_status.go index 999a2d0f1..8fa9effcc 100644 --- a/ui/terminal/smart_status.go +++ b/ui/terminal/smart_status.go @@ -17,11 +17,8 @@ package terminal import ( "fmt" "io" - "os" - "os/signal" "strings" "sync" - "syscall" "android/soong/ui/status" ) @@ -33,29 +30,18 @@ type smartStatusOutput struct { lock sync.Mutex haveBlankLine bool - - termWidth int - sigwinch chan os.Signal } // NewSmartStatusOutput returns a StatusOutput that represents the // current build status similarly to Ninja's built-in terminal // output. func NewSmartStatusOutput(w io.Writer, formatter formatter) status.StatusOutput { - s := &smartStatusOutput{ + return &smartStatusOutput{ writer: w, formatter: formatter, haveBlankLine: true, - - sigwinch: make(chan os.Signal), } - - s.updateTermSize() - - s.startSigwinch() - - return s } func (s *smartStatusOutput) Message(level status.MsgLevel, message string) { @@ -115,8 +101,6 @@ func (s *smartStatusOutput) Flush() { s.lock.Lock() defer s.lock.Unlock() - s.stopSigwinch() - s.requestLine() } @@ -153,8 +137,16 @@ func (s *smartStatusOutput) statusLine(str string) { // Limit line width to the terminal width, otherwise we'll wrap onto // another line and we won't delete the previous line. - if s.termWidth > 0 { - str = s.elide(str) + // + // Run this on every line in case the window has been resized while + // we're printing. This could be optimized to only re-run when we get + // SIGWINCH if it ever becomes too time consuming. + if max, ok := termWidth(s.writer); ok { + if len(str) > max { + // TODO: Just do a max. Ninja elides the middle, but that's + // more complicated and these lines aren't that important. + str = str[:max] + } } // Move to the beginning on the line, turn on bold, print the output, @@ -164,35 +156,3 @@ func (s *smartStatusOutput) statusLine(str string) { fmt.Fprint(s.writer, start, str, end) s.haveBlankLine = false } - -func (s *smartStatusOutput) elide(str string) string { - if len(str) > s.termWidth { - // TODO: Just do a max. Ninja elides the middle, but that's - // more complicated and these lines aren't that important. - str = str[:s.termWidth] - } - - return str -} - -func (s *smartStatusOutput) startSigwinch() { - signal.Notify(s.sigwinch, syscall.SIGWINCH) - go func() { - for _ = range s.sigwinch { - s.lock.Lock() - s.updateTermSize() - s.lock.Unlock() - } - }() -} - -func (s *smartStatusOutput) stopSigwinch() { - signal.Stop(s.sigwinch) - close(s.sigwinch) -} - -func (s *smartStatusOutput) updateTermSize() { - if w, ok := termWidth(s.writer); ok { - s.termWidth = w - } -} diff --git a/ui/terminal/status_test.go b/ui/terminal/status_test.go index fc9315b96..a87a7f07d 100644 --- a/ui/terminal/status_test.go +++ b/ui/terminal/status_test.go @@ -17,7 +17,6 @@ package terminal import ( "bytes" "fmt" - "syscall" "testing" "android/soong/ui/status" @@ -261,8 +260,6 @@ func TestSmartStatusOutputWidthChange(t *testing.T) { runner.startAction(action) smart.termWidth = 30 - // Fake a SIGWINCH - stat.(*smartStatusOutput).sigwinch <- syscall.SIGWINCH runner.finishAction(result) stat.Flush()