Commit 1a64025f authored by Russ Cox's avatar Russ Cox

cmd/go: disambiguate for-test packages in failure output

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: 's avatarBryan C. Mills <bcmills@google.com>
parent 296e6765
......@@ -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
......
......@@ -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.
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment