From 53f034c7a87c2d802b992bb88814d943c30bf306 Mon Sep 17 00:00:00 2001 From: "Jeff R. Allen" Date: Mon, 11 Mar 2013 11:31:14 +1100 Subject: [PATCH] cmd/go: send output of build and install to stderr "go build" and "go install" were mixing stdout and stderr from the toolchain, then putting it all on stdout. With this change, it stays mixed, and is sent to stderr. Because the toolchain does not create output in a clean compile/install, sending all output to stderr makese more sense. Also fix test.bash because of "mktemp: too few X's in template `testgo'" on Linux. Fixes #4917. R=golang-dev, rsc, adg CC=golang-dev https://golang.org/cl/7393073 --- src/cmd/go/build.go | 6 +++-- src/cmd/go/test.bash | 39 ++++++++++++++------------- src/cmd/go/testdata/errmsg/x.go | 3 --- src/cmd/go/testdata/errmsg/x1_test.go | 3 --- src/cmd/go/testdata/errmsg/x_test.go | 3 --- 5 files changed, 24 insertions(+), 30 deletions(-) delete mode 100644 src/cmd/go/testdata/errmsg/x.go delete mode 100644 src/cmd/go/testdata/errmsg/x1_test.go delete mode 100644 src/cmd/go/testdata/errmsg/x_test.go diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index 38fc43ef18..83aeedaca9 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -391,7 +391,9 @@ var ( func (b *builder) init() { var err error - b.print = fmt.Print + b.print = func(a ...interface{}) (int, error) { + return fmt.Fprint(os.Stderr, a...) + } b.actionCache = make(map[cacheKey]*action) b.mkdirCache = make(map[string]bool) @@ -1632,7 +1634,7 @@ func (b *builder) libgcc(p *Package) (string, error) { // print function to capture the command-line. This // let's us assign it to $LIBGCC and produce a valid // buildscript for cgo packages. - b.print = func(a ...interface{}) (n int, err error) { + b.print = func(a ...interface{}) (int, error) { return fmt.Fprint(&buf, a...) } } diff --git a/src/cmd/go/test.bash b/src/cmd/go/test.bash index 460061a11a..e2264a46e7 100755 --- a/src/cmd/go/test.bash +++ b/src/cmd/go/test.bash @@ -11,18 +11,19 @@ ok=true unset GOPATH unset GOBIN -# Test that error messages have file:line information -# at beginning of line. -for i in testdata/errmsg/*.go -do - # TODO: |cat should not be necessary here but is. - ./testgo test $i 2>&1 | cat >err.out || true - if ! grep -q "^$i:" err.out; then - echo "$i: missing file:line in error message" - cat err.out - ok=false - fi -done +# Test that error messages have file:line information at beginning of +# the line. Also test issue 4917: that the error is on stderr. +d=$(mktemp -d -t testgoXXX) +fn=$d/err.go +echo "package main" > $fn +echo 'import "bar"' >> $fn +./testgo run $fn 2>$d/err.out || true +if ! grep -q "^$fn:" $d/err.out; then + echo "missing file:line in error message" + cat $d/err.out + ok=false +fi +rm -r $d # Test local (./) imports. testlocal() { @@ -51,7 +52,7 @@ testlocal() { ok=false fi - rm -f err.out hello.out hello + rm -f hello.out hello # Test that go install x.go fails. if ./testgo install "testdata/$local/easy.go" >/dev/null 2>&1; then @@ -183,7 +184,7 @@ fi # issue 4186. go get cannot be used to download packages to $GOROOT # Test that without GOPATH set, go get should fail -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src/pkg if GOPATH= GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with $GOPATH unset' @@ -191,7 +192,7 @@ if GOPATH= GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch fi rm -rf $d # Test that with GOPATH=$GOROOT, go get should fail -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) mkdir -p $d/src/pkg if GOPATH=$d GOROOT=$d ./testgo get -d code.google.com/p/go.codereview/cmd/hgpatch ; then echo 'go get code.google.com/p/go.codereview/cmd/hgpatch should not succeed with GOPATH=$GOROOT' @@ -200,7 +201,7 @@ fi rm -rf $d # issue 3941: args with spaces -d=$(mktemp -d -t testgo) +d=$(mktemp -d -t testgoXXX) cat >$d/main.go<$d/src/example/a/main.go <$d/src/example/a/a.go <