aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-02-09 12:58:35 -0800
committerRobert Griesemer <gri@golang.org>2016-02-10 16:46:50 +0000
commit7ebf653fcc8510f260a1afbc3fb9e3de157dfe04 (patch)
treeffb946101322581408519c4d9ffad935b88a2683
parent811b785193e04c630f26f1cff83d276a572e150d (diff)
downloadgo-7ebf653fcc8510f260a1afbc3fb9e3de157dfe04.tar.gz
go-7ebf653fcc8510f260a1afbc3fb9e3de157dfe04.zip
go/internal/gcimporter: interpret relative srcDir relative to cwd
1) go/types.dir: Correctly return "." if there is no path. 2) go/internal/gcimporter.FindPkg: work-around for build.Import (build.Import doesn't produce expected result if srcDir is relative). See also issue 14282. Fixes #14215. Change-Id: Ia3721f9ad8a1115d2595fe99b04baaf30d5765f2 Reviewed-on: https://go-review.googlesource.com/19393 Reviewed-by: Russ Cox <rsc@golang.org>
-rw-r--r--src/go/internal/gcimporter/gcimporter.go6
-rw-r--r--src/go/types/resolver.go10
2 files changed, 9 insertions, 7 deletions
diff --git a/src/go/internal/gcimporter/gcimporter.go b/src/go/internal/gcimporter/gcimporter.go
index 0ef8eb4fc6..d70ec083c3 100644
--- a/src/go/internal/gcimporter/gcimporter.go
+++ b/src/go/internal/gcimporter/gcimporter.go
@@ -31,7 +31,8 @@ var pkgExts = [...]string{".a", ".o"}
// FindPkg returns the filename and unique package id for an import
// path based on package information provided by build.Import (using
-// the build.Default build.Context).
+// the build.Default build.Context). A relative srcDir is interpreted
+// relative to the current working directory.
// If no file was found, an empty filename is returned.
//
func FindPkg(path, srcDir string) (filename, id string) {
@@ -44,6 +45,9 @@ func FindPkg(path, srcDir string) (filename, id string) {
default:
// "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x"
// Don't require the source files to be present.
+ if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282
+ srcDir = abs
+ }
bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
if bp.PkgObj == "" {
return
diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go
index 14148a585b..1536df5bf1 100644
--- a/src/go/types/resolver.go
+++ b/src/go/types/resolver.go
@@ -483,11 +483,9 @@ func pkgName(path string) string {
// (Per the go/build package dependency tests, we cannot import
// path/filepath and simply use filepath.Dir.)
func dir(path string) string {
- if i := strings.LastIndexAny(path, "/\\"); i >= 0 {
- path = path[:i]
+ if i := strings.LastIndexAny(path, `/\`); i > 0 {
+ return path[:i]
}
- if path == "" {
- path = "."
- }
- return path
+ // i <= 0
+ return "."
}