aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2018-01-09 02:09:52 -0800
committerDan Willemsen <dwillemsen@google.com>2018-01-09 02:24:17 -0800
commit0c51851f0846e1e082747bd28c802292d76c5d77 (patch)
treece18c65cfb894df91c172f1475e94068005b9409 /ui
parente6f4ee2061b49899c71faeb9684d77ac53b27d6a (diff)
downloadbuild_soong-0c51851f0846e1e082747bd28c802292d76c5d77.tar.gz
build_soong-0c51851f0846e1e082747bd28c802292d76c5d77.tar.bz2
build_soong-0c51851f0846e1e082747bd28c802292d76c5d77.zip
Apply kati output rewriting to dumpvars
This way we strip out ANSI codes when using dumb terminals. It's likely overkill to use katiRewriteOutput, but we should rarely see any output on stderr while dumping variables. This also lets us turn on kati_stats. Bug: 71729611 Test: lunch missing-eng (colored error) Test: lunch missing-eng 2>&1 | cat (non-colored) Test: TERM=dumb lunch missing-eng (non-colored) Change-Id: Ic63fd42d82a4a64e5c68aecd9ae0f242a0d703f1
Diffstat (limited to 'ui')
-rw-r--r--ui/build/context.go7
-rw-r--r--ui/build/dumpvars.go15
-rw-r--r--ui/build/kati.go3
3 files changed, 19 insertions, 6 deletions
diff --git a/ui/build/context.go b/ui/build/context.go
index 52a337d4..0636631d 100644
--- a/ui/build/context.go
+++ b/ui/build/context.go
@@ -103,6 +103,13 @@ func (c ContextImpl) IsTerminal() bool {
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 96f2274f..a0e1ecad 100644
--- a/ui/build/dumpvars.go
+++ b/ui/build/dumpvars.go
@@ -42,6 +42,7 @@ func dumpMakeVars(ctx Context, config Config, goals, vars []string, write_soong_
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 @@ func dumpMakeVars(ctx Context, config Config, goals, vars []string, write_soong_
}
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 7bb721de..e4715bb9 100644
--- a/ui/build/kati.go
+++ b/ui/build/kati.go
@@ -115,6 +115,7 @@ var katiLogRe = regexp.MustCompile(`^\*kati\*: `)
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 @@ func katiRewriteOutput(ctx Context, pipe io.ReadCloser) {
// 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)))
}