Skip to content

Commit 5b4ea62

Browse files
author
Bryan C. Mills
committed
cmd/go: default to GO111MODULE=auto and make it trigger in GOPATH/src
Fixes #31857 Change-Id: Ib0b791376acb7ee1cdc163f808b8ecf77dbdaf06 Reviewed-on: https://go-review.googlesource.com/c/go/+/176580 Run-TryBot: Bryan C. Mills <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
1 parent 45d74aa commit 5b4ea62

File tree

9 files changed

+25
-68
lines changed

9 files changed

+25
-68
lines changed

src/cmd/go/internal/cfg/cfg.go

-5
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,6 @@ var (
128128
// in module-aware mode (as opposed to GOPATH mode).
129129
// It is equal to modload.Enabled, but not all packages can import modload.
130130
ModulesEnabled bool
131-
132-
// GoModInGOPATH records whether we've found a go.mod in GOPATH/src
133-
// in GO111MODULE=auto mode. In that case, we don't use modules
134-
// but people might expect us to, so 'go get' warns.
135-
GoModInGOPATH string
136131
)
137132

138133
func exeSuffix() string {

src/cmd/go/internal/get/get.go

-5
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,6 @@ func runGet(cmd *base.Command, args []string) {
118118
// Should not happen: main.go should install the separate module-enabled get code.
119119
base.Fatalf("go get: modules not implemented")
120120
}
121-
if cfg.GoModInGOPATH != "" {
122-
// Warn about not using modules with GO111MODULE=auto when go.mod exists.
123-
// To silence the warning, users can set GO111MODULE=off.
124-
fmt.Fprintf(os.Stderr, "go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;\n\tignoring %s;\n\tsee 'go help modules'\n", base.ShortPath(cfg.GoModInGOPATH))
125-
}
126121

127122
work.BuildInit()
128123

src/cmd/go/internal/modload/init.go

+3-30
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434

3535
var (
3636
cwd string // TODO(bcmills): Is this redundant with base.Cwd?
37-
mustUseModules = true
37+
mustUseModules = false
3838
initialized bool
3939

4040
modRoot string
@@ -79,8 +79,6 @@ func BinDir() string {
7979
return filepath.Join(gopath, "bin")
8080
}
8181

82-
var inGOPATH bool // running in GOPATH/src
83-
8482
// Init determines whether module mode is enabled, locates the root of the
8583
// current module (if any), sets environment variables for Git subprocesses, and
8684
// configures the cfg, codehost, load, modfetch, and search packages for use
@@ -95,9 +93,9 @@ func Init() {
9593
switch env {
9694
default:
9795
base.Fatalf("go: unknown environment setting GO111MODULE=%s", env)
98-
case "auto":
96+
case "auto", "":
9997
mustUseModules = false
100-
case "on", "":
98+
case "on":
10199
mustUseModules = true
102100
case "off":
103101
mustUseModules = false
@@ -137,28 +135,6 @@ func Init() {
137135
base.Fatalf("go: %v", err)
138136
}
139137

140-
inGOPATH = false
141-
for _, gopath := range filepath.SplitList(cfg.BuildContext.GOPATH) {
142-
if gopath == "" {
143-
continue
144-
}
145-
if search.InDir(cwd, filepath.Join(gopath, "src")) != "" {
146-
inGOPATH = true
147-
break
148-
}
149-
}
150-
151-
if inGOPATH && !mustUseModules {
152-
if CmdModInit {
153-
die() // Don't init a module that we're just going to ignore.
154-
}
155-
// No automatic enabling in GOPATH.
156-
if root := findModuleRoot(cwd); root != "" {
157-
cfg.GoModInGOPATH = filepath.Join(root, "go.mod")
158-
}
159-
return
160-
}
161-
162138
if CmdModInit {
163139
// Running 'go mod init': go.mod will be created in current directory.
164140
modRoot = cwd
@@ -300,9 +276,6 @@ func die() {
300276
if cfg.Getenv("GO111MODULE") == "off" {
301277
base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
302278
}
303-
if inGOPATH && !mustUseModules {
304-
base.Fatalf("go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'")
305-
}
306279
if cwd != "" {
307280
if dir, name := findAltConfig(cwd); dir != "" {
308281
rel, err := filepath.Rel(cwd, dir)

src/cmd/go/testdata/script/get_insecure_redirect.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
[!net] skip
44

5+
env GO111MODULE=on
56
env GOPROXY=
67

78
! go get -d vcs-test.golang.org/insecure/go/insecure

src/cmd/go/testdata/script/mod_enabled.txt

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
# GO111MODULE=auto should only trigger outside GOPATH/src
1+
# GO111MODULE=auto should trigger any time a go.mod exists in a parent directory.
22
env GO111MODULE=auto
33

44
cd $GOPATH/src/x/y/z
55
go env GOMOD
6-
! stdout . # no non-empty lines
7-
! go list -m -f {{.GoMod}}
8-
stderr 'not using modules'
6+
stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod
7+
go list -m -f {{.GoMod}}
8+
stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod
99

1010
cd $GOPATH/src/x/y/z/w
1111
go env GOMOD
12-
! stdout .
12+
stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod
1313

1414
cd $GOPATH/src/x/y
1515
go env GOMOD
@@ -25,6 +25,17 @@ cd $GOPATH/foo/bar/baz
2525
go env GOMOD
2626
stdout foo[/\\]go.mod
2727

28+
# GO111MODULE unset should be equivalent to auto.
29+
env GO111MODULE=
30+
31+
cd $GOPATH/src/x/y/z
32+
go env GOMOD
33+
stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod
34+
35+
cd $GOPATH/src/x/y
36+
go env GOMOD
37+
! stdout .
38+
2839
# GO111MODULE=on should trigger everywhere
2940
env GO111MODULE=on
3041

src/cmd/go/testdata/script/mod_find.txt

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
env GO111MODULE=auto
1+
env GO111MODULE=on
22

33
# Derive module path from import comment.
44
cd $WORK/x
@@ -12,14 +12,8 @@ addcrlf x.go
1212
go mod init
1313
stderr 'module x'
1414

15-
# go mod should die in GOPATH if modules are not enabled for GOPATH
16-
cd $GOPATH/src/example.com/x/y
17-
! go mod init
18-
stderr 'go: modules disabled inside GOPATH/src by GO111MODULE=auto; see ''go help modules'''
19-
20-
env GO111MODULE=
21-
2215
# Derive module path from location inside GOPATH.
16+
# 'go mod init' should succeed if modules are not explicitly disabled.
2317
cd $GOPATH/src/example.com/x/y
2418
go mod init
2519
stderr 'module example.com/x/y$'

src/cmd/go/testdata/script/mod_get_warning.txt

-10
This file was deleted.

src/cmd/go/testdata/script/mod_gobuild_import.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ env GO111MODULE=off
88

99
# GO111MODULE=auto in GOPATH/src
1010
env GO111MODULE=auto
11-
! exec $WORK/testimport.exe x/y/z/w .
11+
exec $WORK/testimport.exe x/y/z/w .
1212

1313
# GO111MODULE=auto outside GOPATH/src
1414
cd $GOPATH/other
+2-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1+
# 'go mod init' should refuse to initialize a module if it will be
2+
# ignored anyway due to GO111MODULE=off.
13
env GO111MODULE=off
2-
3-
# This script tests that running go mod init with
4-
# GO111MODULE=off when outside of GOPATH will fatal
5-
# with an error message.
64
! go mod init
75
stderr 'go mod init: modules disabled by GO111MODULE=off; see ''go help modules'''

0 commit comments

Comments
 (0)