]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add modload.NeedRoot mode for commands that need module root
authorJay Conrod <jayconrod@google.com>
Fri, 11 Sep 2020 17:30:43 +0000 (13:30 -0400)
committerJay Conrod <jayconrod@google.com>
Tue, 15 Sep 2020 12:46:25 +0000 (12:46 +0000)
This makes error reporting a bit more consistent for 'go mod'
subcommands. Most of these commands only work in module mode when a
go.mod file is present.

Setting modload.ForceUseModules reports an error when GO111MODULE=off.

Setting modload.RootMode to modload.NeedRoot reports an error when no
go.mod file is present.

Change-Id: I1daa8d2971cb8658e0c804765839d903734a412e
Reviewed-on: https://go-review.googlesource.com/c/go/+/254369
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
src/cmd/go/internal/modcmd/download.go
src/cmd/go/internal/modcmd/graph.go
src/cmd/go/internal/modcmd/init.go
src/cmd/go/internal/modcmd/tidy.go
src/cmd/go/internal/modcmd/vendor.go
src/cmd/go/internal/modcmd/verify.go
src/cmd/go/internal/modcmd/why.go
src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/mod_off.txt
src/cmd/go/testdata/script/mod_off_init.txt

index 6227fd9f33dda5a1ea8e1f507fc25975adfb8796..050a2e0e128c5661ffe303952326247977df993e 100644 (file)
@@ -80,9 +80,7 @@ type moduleJSON struct {
 
 func runDownload(ctx context.Context, cmd *base.Command, args []string) {
        // Check whether modules are enabled and whether we're in a module.
-       if cfg.Getenv("GO111MODULE") == "off" {
-               base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
-       }
+       modload.ForceUseModules = true
        if !modload.HasModRoot() && len(args) == 0 {
                base.Fatalf("go mod download: no modules specified (see 'go help mod download')")
        }
index a149b656053698930975489649995a096a14f1d1..3277548c235f9297b96f5b15fb3cf8a4995631f4 100644 (file)
@@ -13,7 +13,6 @@ import (
        "sort"
 
        "cmd/go/internal/base"
-       "cmd/go/internal/cfg"
        "cmd/go/internal/modload"
 
        "golang.org/x/mod/module"
@@ -39,14 +38,8 @@ func runGraph(ctx context.Context, cmd *base.Command, args []string) {
        if len(args) > 0 {
                base.Fatalf("go mod graph: graph takes no arguments")
        }
-       // Checks go mod expected behavior
-       if !modload.Enabled() {
-               if cfg.Getenv("GO111MODULE") == "off" {
-                       base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
-               } else {
-                       base.Fatalf("go: cannot find main module; see 'go help modules'")
-               }
-       }
+       modload.ForceUseModules = true
+       modload.RootMode = modload.NeedRoot
        modload.LoadAllModules(ctx)
 
        reqs := modload.MinReqs()
index 21b235653ea3d16af63a40a0ba108446d8d348fa..7cfc0e6f5ba8fbe58ad13950166f38f1d7021a36 100644 (file)
@@ -40,9 +40,7 @@ func runInit(ctx context.Context, cmd *base.Command, args []string) {
        if len(args) == 1 {
                modload.CmdModModule = args[0]
        }
-       if os.Getenv("GO111MODULE") == "off" {
-               base.Fatalf("go mod init: modules disabled by GO111MODULE=off; see 'go help modules'")
-       }
+       modload.ForceUseModules = true
        modFilePath := modload.ModFilePath()
        if _, err := os.Stat(modFilePath); err == nil {
                base.Fatalf("go mod init: go.mod already exists")
index 30df674ef628f35c31e78e6b918c09e05a4d2b26..cbe3ded5f88aac9fe67be8e52675138491bcba8d 100644 (file)
@@ -50,6 +50,8 @@ func runTidy(ctx context.Context, cmd *base.Command, args []string) {
        // that are in 'all' but outside of the main module, we must explicitly
        // request that their test dependencies be included.
        modload.LoadTests = true
+       modload.ForceUseModules = true
+       modload.RootMode = modload.NeedRoot
 
        modload.LoadALL(ctx)
        modload.TidyBuildList()
index 91d2509452cbc8fa3048edb205ae87d6e4495a9b..44094b7252c1a7fd0a51847a0ff353b78027c91b 100644 (file)
@@ -47,6 +47,8 @@ func runVendor(ctx context.Context, cmd *base.Command, args []string) {
        if len(args) != 0 {
                base.Fatalf("go mod vendor: vendor takes no arguments")
        }
+       modload.ForceUseModules = true
+       modload.RootMode = modload.NeedRoot
        pkgs := modload.LoadVendor(ctx)
 
        vdir := filepath.Join(modload.ModRoot(), "vendor")
index 7700588bde50466d332054bd6400771811360d1b..bd591d3f32e9b22d2f0417047a48c79d171f71d3 100644 (file)
@@ -14,7 +14,6 @@ import (
        "runtime"
 
        "cmd/go/internal/base"
-       "cmd/go/internal/cfg"
        "cmd/go/internal/modfetch"
        "cmd/go/internal/modload"
 
@@ -45,14 +44,8 @@ func runVerify(ctx context.Context, cmd *base.Command, args []string) {
                // NOTE(rsc): Could take a module pattern.
                base.Fatalf("go mod verify: verify takes no arguments")
        }
-       // Checks go mod expected behavior
-       if !modload.Enabled() || !modload.HasModRoot() {
-               if cfg.Getenv("GO111MODULE") == "off" {
-                       base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
-               } else {
-                       base.Fatalf("go: cannot find main module; see 'go help modules'")
-               }
-       }
+       modload.ForceUseModules = true
+       modload.RootMode = modload.NeedRoot
 
        // Only verify up to GOMAXPROCS zips at once.
        type token struct{}
index 8454fdfec6b63402f5146fb0967284e4d46b6a89..ea7c28e0b8c2ec6cf3f9cc294c5db86a422fa773 100644 (file)
@@ -61,6 +61,8 @@ func init() {
 }
 
 func runWhy(ctx context.Context, cmd *base.Command, args []string) {
+       modload.ForceUseModules = true
+       modload.RootMode = modload.NeedRoot
        loadALL := modload.LoadALL
        if *whyVendor {
                loadALL = modload.LoadVendor
index 2f0f60b2632a2fa17af10c2cf05454ba04262939..f93abee96d4c43f689315f087afad8b241fbd3ce 100644 (file)
@@ -77,8 +77,9 @@ const (
        // file the current directory or in parent directories.
        NoRoot
 
-       // TODO(jayconrod): add NeedRoot for commands like 'go mod vendor' that
-       // don't make sense without a main module.
+       // NeedRoot is used for commands that must run in module mode and don't
+       // make sense without a main module.
+       NeedRoot
 )
 
 // ModFile returns the parsed go.mod file.
@@ -172,6 +173,9 @@ func Init() {
                        if cfg.ModFile != "" {
                                base.Fatalf("go: cannot find main module, but -modfile was set.\n\t-modfile cannot be used to set the module root directory.")
                        }
+                       if RootMode == NeedRoot {
+                               base.Fatalf("go: cannot find main module; see 'go help modules'")
+                       }
                        if !mustUseModules {
                                // GO111MODULE is 'auto', and we can't find a module root.
                                // Stay in GOPATH mode.
index cada6deb1dd871182c255821aebd7d723d695c10..a73a58d4d0c0e7ea2298cce8da02bf02a0ead96a 100644 (file)
@@ -4,7 +4,7 @@ env GO111MODULE=off
 # GO111MODULE=off when outside of GOPATH will fatal
 # with an error message, even with some source code in the directory and a go.mod.
 ! go mod init
-stderr 'go mod init: modules disabled by GO111MODULE=off; see ''go help modules'''
+stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''
 ! go mod graph
 stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''
 ! go mod verify
@@ -16,7 +16,7 @@ stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''
 mkdir z
 cd z
 ! go mod init
-stderr 'go mod init: modules disabled by GO111MODULE=off; see ''go help modules'''
+stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''
 ! go mod graph
 stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''
 ! go mod verify
index 1339c8aef9679ce1ecbed258cc9ef73d7348ca78..2aec0b3ed5443d65c4980f76857d4d2870430875 100644 (file)
@@ -2,4 +2,4 @@
 # ignored anyway due to GO111MODULE=off.
 env GO111MODULE=off
 ! go mod init
-stderr 'go mod init: modules disabled by GO111MODULE=off; see ''go help modules'''
+stderr 'go: modules disabled by GO111MODULE=off; see ''go help modules'''