From: Kyle Lemons Date: Mon, 6 Feb 2012 03:10:03 +0000 (+1100) Subject: cmd/go: build: print import errors when invoked on files X-Git-Tag: weekly.2012-02-07~51 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=cb0de68a089fd2b05bcf87c4f487b30b96392b5e;p=gostls13.git cmd/go: build: print import errors when invoked on files This fix makes the goFilesPackage helper function print the errors from package imports and exit similar to how the packagesForBuild function does. Without this change, when invoking "go build *.go" with, for example, an old import path, the following stack trace is generated: panic: runtime error: invalid memory address or nil pointer dereference goroutine 1 [running]: go/build.(*Tree).PkgDir(...) /opt/go/src/pkg/go/build/path.go:52 +0xfb main.(*builder).action(...) /opt/go/src/cmd/go/build.go:327 +0xb8 main.(*builder).action(...) /opt/go/src/cmd/go/build.go:335 +0x208 main.runBuild(...) /opt/go/src/cmd/go/build.go:129 +0x386 main.main() /opt/go/src/cmd/go/main.go:126 +0x2d8 Fixes #2865. R=rsc, dvyukov, r CC=golang-dev https://golang.org/cl/5624052 --- diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index bad37df21c..f6f8de5606 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -304,6 +304,17 @@ func goFilesPackage(gofiles []string, target string) *Package { if pkg.Error != nil { fatalf("%s", pkg.Error) } + printed := map[error]bool{} + for _, err := range pkg.DepsErrors { + // Since these are errors in dependencies, + // the same error might show up multiple times, + // once in each package that depends on it. + // Only print each once. + if !printed[err] { + printed[err] = true + errorf("%s", err) + } + } if target != "" { pkg.target = target } else if pkg.Name == "main" { @@ -312,6 +323,7 @@ func goFilesPackage(gofiles []string, target string) *Package { pkg.target = pkg.Name + ".a" } pkg.ImportPath = "_/" + pkg.target + exitIfErrors() return pkg }