Skip to content

Commit c604792

Browse files
committed
cmd/go: add "go env GOCACHE"
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>
1 parent b31162d commit c604792

File tree

3 files changed

+59
-47
lines changed

3 files changed

+59
-47
lines changed

src/cmd/dist/deps.go

Lines changed: 10 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/cmd/go/internal/cache/default.go

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,52 +26,61 @@ var (
2626
// initDefaultCache does the work of finding the default cache
2727
// the first time Default is called.
2828
func initDefaultCache() {
29-
dir := os.Getenv("GOCACHE")
29+
dir := DefaultDir()
3030
if dir == "off" {
3131
return
3232
}
33-
if dir == "" {
34-
// Compute default location.
35-
// TODO(rsc): This code belongs somewhere else,
36-
// like maybe ioutil.CacheDir or os.CacheDir.
37-
switch runtime.GOOS {
38-
case "windows":
39-
dir = os.Getenv("LocalAppData")
33+
if err := os.MkdirAll(dir, 0777); err != nil {
34+
base.Fatalf("initializing cache in $GOCACHE: %s", err)
35+
}
36+
c, err := Open(dir)
37+
if err != nil {
38+
base.Fatalf("initializing cache in $GOCACHE: %s", err)
39+
}
40+
defaultCache = c
41+
}
4042

41-
case "darwin":
42-
dir = os.Getenv("HOME")
43-
if dir == "" {
44-
return
45-
}
46-
dir += "/Library/Caches"
43+
// DefaultDir returns the effective GOCACHE setting.
44+
// It returns "off" if the cache is disabled.
45+
func DefaultDir() string {
46+
dir := os.Getenv("GOCACHE")
47+
if dir != "" {
48+
return dir
49+
}
4750

48-
case "plan9":
49-
dir = os.Getenv("home")
50-
if dir == "" {
51-
return
52-
}
53-
dir += "/lib/cache"
51+
// Compute default location.
52+
// TODO(rsc): This code belongs somewhere else,
53+
// like maybe ioutil.CacheDir or os.CacheDir.
54+
switch runtime.GOOS {
55+
case "windows":
56+
dir = os.Getenv("LocalAppData")
5457

55-
default: // Unix
56-
// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
57-
dir = os.Getenv("XDG_CACHE_HOME")
58-
if dir == "" {
59-
dir = os.Getenv("HOME")
60-
if dir == "" {
61-
return
62-
}
63-
dir += "/.cache"
64-
}
58+
case "darwin":
59+
dir = os.Getenv("HOME")
60+
if dir == "" {
61+
return "off"
6562
}
66-
dir = filepath.Join(dir, "go-build")
67-
if err := os.MkdirAll(dir, 0777); err != nil {
68-
return
63+
dir += "/Library/Caches"
64+
65+
case "plan9":
66+
dir = os.Getenv("home")
67+
if dir == "" {
68+
return "off"
6969
}
70-
}
70+
// Plan 9 has no established per-user cache directory,
71+
// but $home/lib/xyz is the usual equivalent of $HOME/.xyz on Unix.
72+
dir += "/lib/cache"
7173

72-
c, err := Open(dir)
73-
if err != nil {
74-
base.Fatalf("initializing cache in $GOCACHE: %s", err)
74+
default: // Unix
75+
// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
76+
dir = os.Getenv("XDG_CACHE_HOME")
77+
if dir == "" {
78+
dir = os.Getenv("HOME")
79+
if dir == "" {
80+
return "off"
81+
}
82+
dir += "/.cache"
83+
}
7584
}
76-
defaultCache = c
85+
return filepath.Join(dir, "go-build")
7786
}

src/cmd/go/internal/envcmd/env.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"strings"
1414

1515
"cmd/go/internal/base"
16+
"cmd/go/internal/cache"
1617
"cmd/go/internal/cfg"
1718
"cmd/go/internal/load"
1819
"cmd/go/internal/work"
@@ -55,6 +56,7 @@ func MkEnv() []cfg.EnvVar {
5556
{Name: "GORACE", Value: os.Getenv("GORACE")},
5657
{Name: "GOROOT", Value: cfg.GOROOT},
5758
{Name: "GOTOOLDIR", Value: base.ToolDir},
59+
{Name: "GOCACHE", Value: cache.DefaultDir()},
5860

5961
// disable escape codes in clang errors
6062
{Name: "TERM", Value: "dumb"},

0 commit comments

Comments
 (0)