summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/terminal/simple_status.go8
-rw-r--r--ui/terminal/status.go4
-rw-r--r--ui/terminal/status_test.go8
3 files changed, 12 insertions, 8 deletions
diff --git a/ui/terminal/simple_status.go b/ui/terminal/simple_status.go
index 4e8c56804..936b275a1 100644
--- a/ui/terminal/simple_status.go
+++ b/ui/terminal/simple_status.go
@@ -24,15 +24,17 @@ import (
type simpleStatusOutput struct {
writer io.Writer
formatter formatter
+ keepANSI bool
}
// NewSimpleStatusOutput returns a StatusOutput that represents the
// current build status similarly to Ninja's built-in terminal
// output.
-func NewSimpleStatusOutput(w io.Writer, formatter formatter) status.StatusOutput {
+func NewSimpleStatusOutput(w io.Writer, formatter formatter, keepANSI bool) status.StatusOutput {
return &simpleStatusOutput{
writer: w,
formatter: formatter,
+ keepANSI: keepANSI,
}
}
@@ -54,7 +56,9 @@ func (s *simpleStatusOutput) FinishAction(result status.ActionResult, counts sta
progress := s.formatter.progress(counts) + str
output := s.formatter.result(result)
- output = string(stripAnsiEscapes([]byte(output)))
+ if !s.keepANSI {
+ output = string(stripAnsiEscapes([]byte(output)))
+ }
if output != "" {
fmt.Fprint(s.writer, progress, "\n", output)
diff --git a/ui/terminal/status.go b/ui/terminal/status.go
index d8e739211..2ad174fee 100644
--- a/ui/terminal/status.go
+++ b/ui/terminal/status.go
@@ -26,12 +26,12 @@ import (
//
// statusFormat takes nearly all the same options as NINJA_STATUS.
// %c is currently unsupported.
-func NewStatusOutput(w io.Writer, statusFormat string, forceSimpleOutput, quietBuild bool) status.StatusOutput {
+func NewStatusOutput(w io.Writer, statusFormat string, forceSimpleOutput, quietBuild, forceKeepANSI bool) status.StatusOutput {
formatter := newFormatter(statusFormat, quietBuild)
if !forceSimpleOutput && isSmartTerminal(w) {
return NewSmartStatusOutput(w, formatter)
} else {
- return NewSimpleStatusOutput(w, formatter)
+ return NewSimpleStatusOutput(w, formatter, forceKeepANSI)
}
}
diff --git a/ui/terminal/status_test.go b/ui/terminal/status_test.go
index aa69dff53..810e31d1b 100644
--- a/ui/terminal/status_test.go
+++ b/ui/terminal/status_test.go
@@ -94,7 +94,7 @@ func TestStatusOutput(t *testing.T) {
t.Run("smart", func(t *testing.T) {
smart := &fakeSmartTerminal{termWidth: 40}
- stat := NewStatusOutput(smart, "", false, false)
+ stat := NewStatusOutput(smart, "", false, false, false)
tt.calls(stat)
stat.Flush()
@@ -105,7 +105,7 @@ func TestStatusOutput(t *testing.T) {
t.Run("simple", func(t *testing.T) {
simple := &bytes.Buffer{}
- stat := NewStatusOutput(simple, "", false, false)
+ stat := NewStatusOutput(simple, "", false, false, false)
tt.calls(stat)
stat.Flush()
@@ -116,7 +116,7 @@ func TestStatusOutput(t *testing.T) {
t.Run("force simple", func(t *testing.T) {
smart := &fakeSmartTerminal{termWidth: 40}
- stat := NewStatusOutput(smart, "", true, false)
+ stat := NewStatusOutput(smart, "", true, false, false)
tt.calls(stat)
stat.Flush()
@@ -269,7 +269,7 @@ func TestSmartStatusOutputWidthChange(t *testing.T) {
os.Setenv(tableHeightEnVar, "")
smart := &fakeSmartTerminal{termWidth: 40}
- stat := NewStatusOutput(smart, "", false, false)
+ stat := NewStatusOutput(smart, "", false, false, false)
smartStat := stat.(*smartStatusOutput)
smartStat.sigwinchHandled = make(chan bool)