Commit 8b2a2d03 authored by Bryan C. Mills's avatar Bryan C. Mills

Revert "cmd/go: change the default value of GO111MODULE to 'on'"

This reverts commit cf469165
(CL 162698).

Reason for revert: broke make.bash bootstrapping from head.

Change-Id: I3de6d26b1af9038c6b92dec88667bfa734060a41
Reviewed-on: https://go-review.googlesource.com/c/go/+/166985Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 2bd28cee
This diff is collapsed.
...@@ -12,14 +12,9 @@ import ( ...@@ -12,14 +12,9 @@ import (
"testing" "testing"
"cmd/go/internal/help" "cmd/go/internal/help"
"cmd/go/internal/modload"
) )
func TestDocsUpToDate(t *testing.T) { func TestDocsUpToDate(t *testing.T) {
if !modload.Enabled() {
t.Skipf("help.Help in GOPATH mode is configured by main.main")
}
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
// Match the command in mkalldocs.sh that generates alldocs.go. // Match the command in mkalldocs.sh that generates alldocs.go.
help.Help(buf, []string{"documentation"}) help.Help(buf, []string{"documentation"})
......
...@@ -17,7 +17,6 @@ import ( ...@@ -17,7 +17,6 @@ import (
"unicode/utf8" "unicode/utf8"
"cmd/go/internal/base" "cmd/go/internal/base"
"cmd/go/internal/modload"
) )
// Help implements the 'help' command. // Help implements the 'help' command.
...@@ -36,10 +35,8 @@ func Help(w io.Writer, args []string) { ...@@ -36,10 +35,8 @@ func Help(w io.Writer, args []string) {
usage := &base.Command{Long: buf.String()} usage := &base.Command{Long: buf.String()}
cmds := []*base.Command{usage} cmds := []*base.Command{usage}
for _, cmd := range base.Go.Commands { for _, cmd := range base.Go.Commands {
// Avoid duplication of the "get" documentation. if cmd.UsageLine == "gopath-get" {
if cmd.UsageLine == "module-get" && modload.Enabled() { // Avoid duplication of the "get" documentation.
continue
} else if cmd.UsageLine == "gopath-get" && !modload.Enabled() {
continue continue
} }
cmds = append(cmds, cmd) cmds = append(cmds, cmd)
......
...@@ -19,25 +19,34 @@ including recording and resolving dependencies on other modules. ...@@ -19,25 +19,34 @@ including recording and resolving dependencies on other modules.
Modules replace the old GOPATH-based approach to specifying Modules replace the old GOPATH-based approach to specifying
which source files are used in a given build. which source files are used in a given build.
Module support Preliminary module support
Go 1.13 includes official support for Go modules, Go 1.11 includes preliminary support for Go modules,
including a module-aware 'go get' command. including a new module-aware 'go get' command.
Module-aware mode is active by default. We intend to keep revising this support, while preserving compatibility,
until it can be declared official (no longer preliminary),
and then at a later point we may remove support for work
in GOPATH and the old 'go get' command.
For more fine-grained control, Go 1.13 continues to respect The quickest way to take advantage of the new Go 1.11 module support
is to check out your repository into a directory outside GOPATH/src,
create a go.mod file (described in the next section) there, and run
go commands from within that file tree.
For more fine-grained control, the module support in Go 1.11 respects
a temporary environment variable, GO111MODULE, which can be set to one a temporary environment variable, GO111MODULE, which can be set to one
of three string values: off, auto, or on (the default). of three string values: off, on, or auto (the default).
If GO111MODULE=on or is unset, then the go command requires the use of If GO111MODULE=off, then the go command never uses the
modules, never consulting GOPATH. We refer to this as the command new module support. Instead it looks in vendor directories and GOPATH
being module-aware or running in "module-aware mode".
If GO111MODULE=auto, then the go command enables or disables module
support based on the current directory. Module support is enabled only
when the current directory is outside GOPATH/src and itself contains a
go.mod file or is below a directory containing a go.mod file.
If GO111MODULE=off, then the go command never uses
module support. Instead it looks in vendor directories and GOPATH
to find dependencies; we now refer to this as "GOPATH mode." to find dependencies; we now refer to this as "GOPATH mode."
If GO111MODULE=on, then the go command requires the use of modules,
never consulting GOPATH. We refer to this as the command being
module-aware or running in "module-aware mode".
If GO111MODULE=auto or is unset, then the go command enables or
disables module support based on the current directory.
Module support is enabled only when the current directory is outside
GOPATH/src and itself contains a go.mod file or is below a directory
containing a go.mod file.
In module-aware mode, GOPATH no longer defines the meaning of imports In module-aware mode, GOPATH no longer defines the meaning of imports
during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod) during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod)
......
...@@ -34,7 +34,7 @@ import ( ...@@ -34,7 +34,7 @@ import (
var ( var (
cwd string // TODO(bcmills): Is this redundant with base.Cwd? cwd string // TODO(bcmills): Is this redundant with base.Cwd?
mustUseModules = true MustUseModules = mustUseModules()
initialized bool initialized bool
modRoot string modRoot string
...@@ -70,6 +70,16 @@ func BinDir() string { ...@@ -70,6 +70,16 @@ func BinDir() string {
return filepath.Join(gopath, "bin") return filepath.Join(gopath, "bin")
} }
// mustUseModules reports whether we are invoked as vgo
// (as opposed to go).
// If so, we only support builds with go.mod files.
func mustUseModules() bool {
name := os.Args[0]
name = name[strings.LastIndex(name, "/")+1:]
name = name[strings.LastIndex(name, `\`)+1:]
return strings.HasPrefix(name, "vgo")
}
var inGOPATH bool // running in GOPATH/src var inGOPATH bool // running in GOPATH/src
// Init determines whether module mode is enabled, locates the root of the // Init determines whether module mode is enabled, locates the root of the
...@@ -86,13 +96,14 @@ func Init() { ...@@ -86,13 +96,14 @@ func Init() {
switch env { switch env {
default: default:
base.Fatalf("go: unknown environment setting GO111MODULE=%s", env) base.Fatalf("go: unknown environment setting GO111MODULE=%s", env)
case "auto": case "", "auto":
mustUseModules = false // leave MustUseModules alone
case "on", "": case "on":
mustUseModules = true MustUseModules = true
case "off": case "off":
mustUseModules = false if !MustUseModules {
return return
}
} }
// Disable any prompting for passwords by Git. // Disable any prompting for passwords by Git.
...@@ -139,7 +150,7 @@ func Init() { ...@@ -139,7 +150,7 @@ func Init() {
} }
} }
if inGOPATH && !mustUseModules { if inGOPATH && !MustUseModules {
if CmdModInit { if CmdModInit {
die() // Don't init a module that we're just going to ignore. die() // Don't init a module that we're just going to ignore.
} }
...@@ -156,8 +167,8 @@ func Init() { ...@@ -156,8 +167,8 @@ func Init() {
} else { } else {
modRoot = findModuleRoot(cwd) modRoot = findModuleRoot(cwd)
if modRoot == "" { if modRoot == "" {
if !mustUseModules { if !MustUseModules {
// GO111MODULE is 'auto', and we can't find a module root. // GO111MODULE is 'auto' (or unset), and we can't find a module root.
// Stay in GOPATH mode. // Stay in GOPATH mode.
return return
} }
...@@ -256,7 +267,7 @@ func init() { ...@@ -256,7 +267,7 @@ func init() {
// (usually through MustModRoot). // (usually through MustModRoot).
func Enabled() bool { func Enabled() bool {
Init() Init()
return modRoot != "" || mustUseModules return modRoot != "" || MustUseModules
} }
// ModRoot returns the root of the main module. // ModRoot returns the root of the main module.
...@@ -289,7 +300,7 @@ func die() { ...@@ -289,7 +300,7 @@ func die() {
if os.Getenv("GO111MODULE") == "off" { if os.Getenv("GO111MODULE") == "off" {
base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'") base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
} }
if inGOPATH && !mustUseModules { if inGOPATH && !MustUseModules {
base.Fatalf("go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'") base.Fatalf("go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'")
} }
if cwd != "" { if cwd != "" {
......
...@@ -49,7 +49,7 @@ func init() { ...@@ -49,7 +49,7 @@ func init() {
fix.CmdFix, fix.CmdFix,
fmtcmd.CmdFmt, fmtcmd.CmdFmt,
generate.CmdGenerate, generate.CmdGenerate,
modget.CmdGet, get.CmdGet,
work.CmdInstall, work.CmdInstall,
list.CmdList, list.CmdList,
modcmd.CmdMod, modcmd.CmdMod,
...@@ -89,10 +89,17 @@ func main() { ...@@ -89,10 +89,17 @@ func main() {
base.Usage() base.Usage()
} }
if modload.MustUseModules {
// If running with modules force-enabled, change get now to change help message.
*get.CmdGet = *modget.CmdGet
}
if args[0] == "get" || args[0] == "help" { if args[0] == "get" || args[0] == "help" {
if modload.Init(); !modload.Enabled() { // Replace get with module-aware get if appropriate.
// Replace module-aware get with GOPATH get if appropriate. // Note that if MustUseModules is true, this happened already above,
*modget.CmdGet = *get.CmdGet // but no harm in doing it again.
if modload.Init(); modload.Enabled() {
*get.CmdGet = *modget.CmdGet
} }
} }
......
...@@ -8,6 +8,6 @@ set -e ...@@ -8,6 +8,6 @@ set -e
go build -o go.latest go build -o go.latest
# If the command used to generate alldocs.go changes, update TestDocsUpToDate in # If the command used to generate alldocs.go changes, update TestDocsUpToDate in
# help_test.go. # help_test.go.
GO111MODULE='' ./go.latest help documentation >alldocs.go ./go.latest help documentation >alldocs.go
gofmt -w alldocs.go gofmt -w alldocs.go
rm go.latest rm go.latest
...@@ -17,7 +17,7 @@ cd $GOPATH/src/example.com/x/y ...@@ -17,7 +17,7 @@ cd $GOPATH/src/example.com/x/y
! go mod init ! go mod init
stderr 'go: modules disabled inside GOPATH/src by GO111MODULE=auto; see ''go help modules''' stderr 'go: modules disabled inside GOPATH/src by GO111MODULE=auto; see ''go help modules'''
env GO111MODULE= env GO111MODULE=on
# Derive module path from location inside GOPATH. # Derive module path from location inside GOPATH.
cd $GOPATH/src/example.com/x/y cd $GOPATH/src/example.com/x/y
......
...@@ -24,18 +24,12 @@ exec $WORK/testimport.exe other/x/y/z/w . ...@@ -24,18 +24,12 @@ exec $WORK/testimport.exe other/x/y/z/w .
stdout w2.go stdout w2.go
# GO111MODULE=on outside GOPATH/src # GO111MODULE=on outside GOPATH/src
env GO111MODULE=
exec $WORK/testimport.exe other/x/y/z/w .
stdout w2.go
env GO111MODULE=on env GO111MODULE=on
exec $WORK/testimport.exe other/x/y/z/w . exec $WORK/testimport.exe other/x/y/z/w .
stdout w2.go stdout w2.go
# GO111MODULE=on in GOPATH/src # GO111MODULE=on in GOPATH/src
cd $GOPATH/src cd $GOPATH/src
env GO111MODULE=
exec $WORK/testimport.exe x/y/z/w .
stdout w1.go
env GO111MODULE=on env GO111MODULE=on
exec $WORK/testimport.exe x/y/z/w . exec $WORK/testimport.exe x/y/z/w .
stdout w1.go stdout w1.go
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment