Merge "Apply kati output rewriting to dumpvars"
diff --git a/ui/build/context.go b/ui/build/context.go
index 52a337d..0636631 100644
--- a/ui/build/context.go
+++ b/ui/build/context.go
@@ -103,6 +103,13 @@
return false
}
+func (c ContextImpl) IsErrTerminal() bool {
+ if term, ok := os.LookupEnv("TERM"); ok {
+ return term != "dumb" && isTerminal(c.Stderr())
+ }
+ return false
+}
+
func (c ContextImpl) TermWidth() (int, bool) {
return termWidth(c.Stdout())
}
diff --git a/ui/build/dumpvars.go b/ui/build/dumpvars.go
index 96f2274..a0e1eca 100644
--- a/ui/build/dumpvars.go
+++ b/ui/build/dumpvars.go
@@ -42,6 +42,7 @@
config.PrebuiltBuildTool("ckati"),
"-f", "build/make/core/config.mk",
"--color_warnings",
+ "--kati_stats",
"dump-many-vars",
"MAKECMDGOALS="+strings.Join(goals, " "))
cmd.Environment.Set("CALLED_FROM_SETUP", "true")
@@ -51,15 +52,19 @@
}
cmd.Environment.Set("DUMP_MANY_VARS", strings.Join(vars, " "))
cmd.Sandbox = dumpvarsSandbox
- // TODO: error out when Stderr contains any content
- cmd.Stderr = ctx.Stderr()
- output, err := cmd.Output()
+ output := bytes.Buffer{}
+ cmd.Stdout = &output
+ pipe, err := cmd.StderrPipe()
if err != nil {
- return nil, err
+ ctx.Fatalln("Error getting output pipe for ckati:", err)
}
+ cmd.StartOrFatal()
+ // TODO: error out when Stderr contains any content
+ katiRewriteOutput(ctx, pipe)
+ cmd.WaitOrFatal()
ret := make(map[string]string, len(vars))
- for _, line := range strings.Split(string(output), "\n") {
+ for _, line := range strings.Split(output.String(), "\n") {
if len(line) == 0 {
continue
}
diff --git a/ui/build/kati.go b/ui/build/kati.go
index 7bb721d..e4715bb 100644
--- a/ui/build/kati.go
+++ b/ui/build/kati.go
@@ -115,6 +115,7 @@
func katiRewriteOutput(ctx Context, pipe io.ReadCloser) {
haveBlankLine := true
smartTerminal := ctx.IsTerminal()
+ errSmartTerminal := ctx.IsErrTerminal()
scanner := bufio.NewScanner(pipe)
for scanner.Scan() {
@@ -155,7 +156,7 @@
// that message instead of overwriting it.
fmt.Fprintln(ctx.Stdout())
haveBlankLine = true
- } else if !smartTerminal {
+ } else if !errSmartTerminal {
// Most editors display these as garbage, so strip them out.
line = string(stripAnsiEscapes([]byte(line)))
}