diff options
author | Robert Griesemer <gri@golang.org> | 2016-02-09 12:58:35 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2016-02-10 16:46:50 +0000 |
commit | 7ebf653fcc8510f260a1afbc3fb9e3de157dfe04 (patch) | |
tree | ffb946101322581408519c4d9ffad935b88a2683 | |
parent | 811b785193e04c630f26f1cff83d276a572e150d (diff) | |
download | go-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.go | 6 | ||||
-rw-r--r-- | src/go/types/resolver.go | 10 |
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 "." } |