]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add "go env GOCACHE"
authorRuss Cox <rsc@golang.org>
Wed, 1 Nov 2017 23:37:07 +0000 (19:37 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 2 Nov 2017 03:35:41 +0000 (03:35 +0000)
This lets users see the effective GOCACHE setting.

Change-Id: I0b6dd2945d54611be89ed68fe2fd99110b9a25f6
Reviewed-on: https://go-review.googlesource.com/75293
Reviewed-by: David Crawshaw <crawshaw@golang.org>
src/cmd/dist/deps.go
src/cmd/go/internal/cache/default.go
src/cmd/go/internal/envcmd/env.go

index eef21c9a86ff390a10c7dc154a8606d022b1b66b..a12cea5f93fe5c9ed01b39ad58bd38bd1cd7f21f 100644 (file)
@@ -137,15 +137,16 @@ var builddeps = map[string][]string{
        },
 
        "cmd/go/internal/envcmd": {
-               "cmd/go/internal/base", // cmd/go/internal/envcmd
-               "cmd/go/internal/cfg",  // cmd/go/internal/envcmd
-               "cmd/go/internal/load", // cmd/go/internal/envcmd
-               "cmd/go/internal/work", // cmd/go/internal/envcmd
-               "encoding/json",        // cmd/go/internal/envcmd
-               "fmt",                  // cmd/go/internal/envcmd
-               "os",                   // cmd/go/internal/envcmd
-               "runtime",              // cmd/go/internal/envcmd
-               "strings",              // cmd/go/internal/envcmd
+               "cmd/go/internal/base",  // cmd/go/internal/envcmd
+               "cmd/go/internal/cache", // cmd/go/internal/envcmd
+               "cmd/go/internal/cfg",   // cmd/go/internal/envcmd
+               "cmd/go/internal/load",  // cmd/go/internal/envcmd
+               "cmd/go/internal/work",  // cmd/go/internal/envcmd
+               "encoding/json",         // cmd/go/internal/envcmd
+               "fmt",                   // cmd/go/internal/envcmd
+               "os",                    // cmd/go/internal/envcmd
+               "runtime",               // cmd/go/internal/envcmd
+               "strings",               // cmd/go/internal/envcmd
        },
 
        "cmd/go/internal/fix": {
index 65b95a32e7b3fd1df06bd751dfe5a27d925babc7..478069904d24e6b654fff58dd8b50adcd5f7c9bb 100644 (file)
@@ -26,52 +26,61 @@ var (
 // initDefaultCache does the work of finding the default cache
 // the first time Default is called.
 func initDefaultCache() {
-       dir := os.Getenv("GOCACHE")
+       dir := DefaultDir()
        if dir == "off" {
                return
        }
-       if dir == "" {
-               // Compute default location.
-               // TODO(rsc): This code belongs somewhere else,
-               // like maybe ioutil.CacheDir or os.CacheDir.
-               switch runtime.GOOS {
-               case "windows":
-                       dir = os.Getenv("LocalAppData")
+       if err := os.MkdirAll(dir, 0777); err != nil {
+               base.Fatalf("initializing cache in $GOCACHE: %s", err)
+       }
+       c, err := Open(dir)
+       if err != nil {
+               base.Fatalf("initializing cache in $GOCACHE: %s", err)
+       }
+       defaultCache = c
+}
 
-               case "darwin":
-                       dir = os.Getenv("HOME")
-                       if dir == "" {
-                               return
-                       }
-                       dir += "/Library/Caches"
+// DefaultDir returns the effective GOCACHE setting.
+// It returns "off" if the cache is disabled.
+func DefaultDir() string {
+       dir := os.Getenv("GOCACHE")
+       if dir != "" {
+               return dir
+       }
 
-               case "plan9":
-                       dir = os.Getenv("home")
-                       if dir == "" {
-                               return
-                       }
-                       dir += "/lib/cache"
+       // Compute default location.
+       // TODO(rsc): This code belongs somewhere else,
+       // like maybe ioutil.CacheDir or os.CacheDir.
+       switch runtime.GOOS {
+       case "windows":
+               dir = os.Getenv("LocalAppData")
 
-               default: // Unix
-                       // https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
-                       dir = os.Getenv("XDG_CACHE_HOME")
-                       if dir == "" {
-                               dir = os.Getenv("HOME")
-                               if dir == "" {
-                                       return
-                               }
-                               dir += "/.cache"
-                       }
+       case "darwin":
+               dir = os.Getenv("HOME")
+               if dir == "" {
+                       return "off"
                }
-               dir = filepath.Join(dir, "go-build")
-               if err := os.MkdirAll(dir, 0777); err != nil {
-                       return
+               dir += "/Library/Caches"
+
+       case "plan9":
+               dir = os.Getenv("home")
+               if dir == "" {
+                       return "off"
                }
-       }
+               // Plan 9 has no established per-user cache directory,
+               // but $home/lib/xyz is the usual equivalent of $HOME/.xyz on Unix.
+               dir += "/lib/cache"
 
-       c, err := Open(dir)
-       if err != nil {
-               base.Fatalf("initializing cache in $GOCACHE: %s", err)
+       default: // Unix
+               // https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+               dir = os.Getenv("XDG_CACHE_HOME")
+               if dir == "" {
+                       dir = os.Getenv("HOME")
+                       if dir == "" {
+                               return "off"
+                       }
+                       dir += "/.cache"
+               }
        }
-       defaultCache = c
+       return filepath.Join(dir, "go-build")
 }
index 2e3e9d3973fd88dac5d2e5ae251d973d0375d56e..cd3f9000c2952f30e3b462a623f3ef5e432890a6 100644 (file)
@@ -13,6 +13,7 @@ import (
        "strings"
 
        "cmd/go/internal/base"
+       "cmd/go/internal/cache"
        "cmd/go/internal/cfg"
        "cmd/go/internal/load"
        "cmd/go/internal/work"
@@ -55,6 +56,7 @@ func MkEnv() []cfg.EnvVar {
                {Name: "GORACE", Value: os.Getenv("GORACE")},
                {Name: "GOROOT", Value: cfg.GOROOT},
                {Name: "GOTOOLDIR", Value: base.ToolDir},
+               {Name: "GOCACHE", Value: cache.DefaultDir()},
 
                // disable escape codes in clang errors
                {Name: "TERM", Value: "dumb"},