]> Cypherpunks repositories - gostls13.git/commitdiff
go/internal/gcimporter: interpret relative srcDir relative to cwd
authorRobert Griesemer <gri@golang.org>
Tue, 9 Feb 2016 20:58:35 +0000 (12:58 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 10 Feb 2016 16:46:50 +0000 (16:46 +0000)
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>
src/go/internal/gcimporter/gcimporter.go
src/go/types/resolver.go

index 0ef8eb4fc6ca78bf65f81c0326ad4745e49b20a6..d70ec083c33309beb4394d1edbc62843930716f3 100644 (file)
@@ -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
index 14148a585b1047be92147d38a3dd100dc686a474..1536df5bf1bebcdc35ce5a2e1282004b050a3027 100644 (file)
@@ -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 "."
 }