]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix two bugs
authorRuss Cox <rsc@golang.org>
Tue, 27 Mar 2012 14:41:44 +0000 (10:41 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 27 Mar 2012 14:41:44 +0000 (10:41 -0400)
Issue 3207 was caused by setting GOPATH=GOROOT.
This is a common mistake, so diagnose it at command start
and also correct the bug that it caused in get (downloading
to GOROOT/src/foo instead of GOROOT/src/pkg/foo).

Issue 3268 was caused by recognizing 'packages' that
had installed binaries but no source.  This behavior is not
documented and causes trouble, so remove it.  We can
revisit the concept of binary-only packages after Go 1.

Fixes #3207.
Fixes #3268.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5930044

src/cmd/go/get.go
src/cmd/go/main.go
src/cmd/go/pkg.go

index 6ad683a8bec0894b3a5898617f826e7bcb0716e2..f70b6761de267a618360af8400acf5e761387b9e 100644 (file)
@@ -252,7 +252,9 @@ func downloadPackage(p *Package) error {
 
        if p.build.SrcRoot == "" {
                // Package not found.  Put in first directory of $GOPATH or else $GOROOT.
-               if list := filepath.SplitList(buildContext.GOPATH); len(list) > 0 {
+               // Guard against people setting GOPATH=$GOROOT.  We have to use
+               // $GOROOT's directory hierarchy (src/pkg, not just src) in that case.
+               if list := filepath.SplitList(buildContext.GOPATH); len(list) > 0 && list[0] != goroot {
                        p.build.SrcRoot = filepath.Join(list[0], "src")
                        p.build.PkgRoot = filepath.Join(list[0], "pkg")
                } else {
index 2f8209c86f4185223fd60e164822efa23719cc69..73c2f54a76565a492ffd942f9db7bd5f3d835d0d 100644 (file)
@@ -16,6 +16,7 @@ import (
        "path"
        "path/filepath"
        "regexp"
+       "runtime"
        "strings"
        "sync"
        "text/template"
@@ -121,6 +122,13 @@ func main() {
                return
        }
 
+       // Diagnose common mistake: GOPATH==GOROOT.
+       // This setting is equivalent to not setting GOPATH at all,
+       // which is not what most people want when they do it.
+       if gopath := os.Getenv("GOPATH"); gopath == runtime.GOROOT() {
+               fmt.Fprintf(os.Stderr, "warning: GOPATH set to GOROOT (%s) has no effect\n", gopath)
+       }
+
        for _, cmd := range commands {
                if cmd.Name() == args[0] && cmd.Run != nil {
                        cmd.Flag.Usage = func() { cmd.Usage() }
index 44dbd6798ab4f7efd3f6fab60ea287123bc635ed..1a75019aca3ba30239e3372d8880023968745439 100644 (file)
@@ -217,7 +217,10 @@ func loadImport(path string, srcDir string, stk *importStack, importPos []token.
        // Load package.
        // Import always returns bp != nil, even if an error occurs,
        // in order to return partial information.
-       bp, err := buildContext.Import(path, srcDir, build.AllowBinary)
+       //
+       // TODO: After Go 1, decide when to pass build.AllowBinary here.
+       // See issue 3268 for mistakes to avoid.
+       bp, err := buildContext.Import(path, srcDir, 0)
        bp.ImportPath = importPath
        p.load(stk, bp, err)
        if p.Error != nil && len(importPos) > 0 {