Commit cb0de68a authored by Kyle Lemons's avatar Kyle Lemons Committed by Rob Pike

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
parent 5be24046
...@@ -304,6 +304,17 @@ func goFilesPackage(gofiles []string, target string) *Package { ...@@ -304,6 +304,17 @@ func goFilesPackage(gofiles []string, target string) *Package {
if pkg.Error != nil { if pkg.Error != nil {
fatalf("%s", pkg.Error) 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 != "" { if target != "" {
pkg.target = target pkg.target = target
} else if pkg.Name == "main" { } else if pkg.Name == "main" {
...@@ -312,6 +323,7 @@ func goFilesPackage(gofiles []string, target string) *Package { ...@@ -312,6 +323,7 @@ func goFilesPackage(gofiles []string, target string) *Package {
pkg.target = pkg.Name + ".a" pkg.target = pkg.Name + ".a"
} }
pkg.ImportPath = "_/" + pkg.target pkg.ImportPath = "_/" + pkg.target
exitIfErrors()
return pkg return pkg
} }
......
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