From: Jeff R. Allen Date: Mon, 11 Mar 2013 00:31:14 +0000 (+1100) Subject: cmd/go: send output of build and install to stderr X-Git-Tag: go1.1rc2~609 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=53f034c7a87c2d802b992bb88814d943c30bf306;p=gostls13.git 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 --- 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 <