]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: disambiguate for-test packages in failure output
authorRuss Cox <rsc@golang.org>
Thu, 19 Apr 2018 15:09:05 +0000 (11:09 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 26 Apr 2018 03:19:18 +0000 (03:19 +0000)
Now that we can tell when a package is a split-off copy
for testing, show that in the build failures.
For example, instead of:

# regexp/syntax
../../regexp/syntax/parse.go:9:2: can't find import: "strings"
# path/filepath
../../path/filepath/match.go:12:2: can't find import: "strings"
# flag
../../flag/flag.go:75:2: can't find import: "strings"

we now print

# regexp/syntax [strings.test]
../../regexp/syntax/parse.go:9:2: can't find import: "strings"
# path/filepath [strings.test]
../../path/filepath/match.go:12:2: can't find import: "strings"
# flag [strings.test]
../../flag/flag.go:75:2: can't find import: "strings"

which gives more of a hint about what is wrong.

This is especially helpful if a package is being built multiple times,
since it explains why an error might appear multiple times:

$ go test regexp encoding/json
# regexp
../../regexp/exec.go:12:9: undefined: x
# regexp [regexp.test]
../../regexp/exec.go:12:9: undefined: x
FAIL regexp [build failed]
FAIL encoding/json [build failed]
$

Change-Id: Ie325796f6c3cf0e23f306066be8e65a30cb6b939
Reviewed-on: https://go-review.googlesource.com/108155
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/internal/load/pkg.go
src/cmd/go/internal/work/exec.go
src/cmd/go/internal/work/gc.go

index ff9243a320b367d1e366134ced7fb125e5355521..af5ffcd1035214de456afcd222e8fb50dbd7e1df 100644 (file)
@@ -122,6 +122,14 @@ func (p *Package) AllFiles() []string {
        )
 }
 
+// Desc returns the package "description", for use in b.showOutput.
+func (p *Package) Desc() string {
+       if p.ForTest != "" {
+               return p.ImportPath + " [" + p.ForTest + ".test]"
+       }
+       return p.ImportPath
+}
+
 type PackageInternal struct {
        // Unexported fields are not part of the public API.
        Build        *build.Package
index 8c451aae52c9bba34e740d413b17694cccd058f6..7014159ceecacf8b51ad2610c05c176506355286 100644 (file)
@@ -573,7 +573,7 @@ func (b *Builder) build(a *Action) (err error) {
        objpkg := objdir + "_pkg_.a"
        ofile, out, err := BuildToolchain.gc(b, a, objpkg, icfg.Bytes(), len(sfiles) > 0, gofiles)
        if len(out) > 0 {
-               b.showOutput(a, a.Package.Dir, a.Package.ImportPath, b.processOutput(out))
+               b.showOutput(a, a.Package.Dir, a.Package.Desc(), b.processOutput(out))
                if err != nil {
                        return errPrintedOutput
                }
@@ -2411,13 +2411,13 @@ func (b *Builder) swigOne(a *Action, p *load.Package, file, objdir string, pcCFL
                        if bytes.Contains(out, []byte("-intgosize")) || bytes.Contains(out, []byte("-cgo")) {
                                return "", "", errors.New("must have SWIG version >= 3.0.6")
                        }
-                       b.showOutput(a, p.Dir, p.ImportPath, b.processOutput(out)) // swig error
+                       b.showOutput(a, p.Dir, p.Desc(), b.processOutput(out)) // swig error
                        return "", "", errPrintedOutput
                }
                return "", "", err
        }
        if len(out) > 0 {
-               b.showOutput(a, p.Dir, p.ImportPath, b.processOutput(out)) // swig warning
+               b.showOutput(a, p.Dir, p.Desc(), b.processOutput(out)) // swig warning
        }
 
        // If the input was x.swig, the output is x.go in the objdir.
index 2d61e54333f402abcb6f341b348951753d281576..4827cea9efdbb431d6ee5d558cdfd7e1c479c744 100644 (file)
@@ -295,7 +295,7 @@ func (gcToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) er
                return nil
        }
        if err := packInternal(absAfile, absOfiles); err != nil {
-               b.showOutput(a, p.Dir, p.ImportPath, err.Error()+"\n")
+               b.showOutput(a, p.Dir, p.Desc(), err.Error()+"\n")
                return errPrintedOutput
        }
        return nil