]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: better error for install of 'test-only' package
authorRuss Cox <rsc@golang.org>
Mon, 12 May 2014 15:04:28 +0000 (11:04 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 12 May 2014 15:04:28 +0000 (11:04 -0400)
Fixes #7915.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/96210044

src/cmd/go/build.go
src/cmd/go/test.bash
src/cmd/go/testdata/testonly/p_test.go [new file with mode: 0644]

index 9cbe089956d864e342daee191dbba2538ad1f408..78ff9ade389618a4e816ff3ce72f74b28f653e67 100644 (file)
@@ -882,6 +882,10 @@ func (b *builder) build(a *action) (err error) {
                gofiles = append(gofiles, outGo...)
        }
 
+       if len(gofiles) == 0 {
+               return &build.NoGoError{a.p.Dir}
+       }
+
        // If we're doing coverage, preprocess the .go files and put them in the work directory
        if a.p.coverMode != "" {
                for i, file := range gofiles {
@@ -915,21 +919,19 @@ func (b *builder) build(a *action) (err error) {
        inc := b.includeArgs("-I", a.deps)
 
        // Compile Go.
-       if len(gofiles) > 0 {
-               ofile, out, err := buildToolchain.gc(b, a.p, a.objpkg, obj, inc, gofiles)
-               if len(out) > 0 {
-                       b.showOutput(a.p.Dir, a.p.ImportPath, b.processOutput(out))
-                       if err != nil {
-                               return errPrintedOutput
-                       }
-               }
+       ofile, out, err := buildToolchain.gc(b, a.p, a.objpkg, obj, inc, gofiles)
+       if len(out) > 0 {
+               b.showOutput(a.p.Dir, a.p.ImportPath, b.processOutput(out))
                if err != nil {
-                       return err
-               }
-               if ofile != a.objpkg {
-                       objects = append(objects, ofile)
+                       return errPrintedOutput
                }
        }
+       if err != nil {
+               return err
+       }
+       if ofile != a.objpkg {
+               objects = append(objects, ofile)
+       }
 
        // Copy .h files named for goos or goarch or goos_goarch
        // to names using GOOS and GOARCH.
index 7aff40cc75c0d5074a8dc5025b392718aa95f30a..bc6c36683a99de80923f9f3a69c872ecd39b5657 100755 (executable)
@@ -759,6 +759,17 @@ fi
 rm -rf $d
 unset GOPATH
 
+TEST 'go build in test-only directory fails with a good error'
+if ./testgo build ./testdata/testonly 2>testdata/err.out; then
+       echo "go build ./testdata/testonly succeeded, should have failed"
+       ok=false
+elif ! grep 'no buildable Go' testdata/err.out >/dev/null; then
+       echo "go build ./testdata/testonly produced unexpected error:"
+       cat testdata/err.out
+       ok=false
+fi
+rm -f testdata/err.out
+
 # clean up
 if $started; then stop; fi
 rm -rf testdata/bin testdata/bin1
diff --git a/src/cmd/go/testdata/testonly/p_test.go b/src/cmd/go/testdata/testonly/p_test.go
new file mode 100644 (file)
index 0000000..c89cd18
--- /dev/null
@@ -0,0 +1 @@
+package p