]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: remove the -mod flag from 'go get'
authorBryan C. Mills <bcmills@google.com>
Wed, 2 Oct 2019 14:51:09 +0000 (10:51 -0400)
committerBryan C. Mills <bcmills@google.com>
Fri, 4 Oct 2019 15:47:46 +0000 (15:47 +0000)
'GOFLAGS=-mod=vendor' currently causes 'go get' to always fail unless
the '-mod' flag is explicitly overwritten. Moreover, as of CL 198319
we plan to set -mod=vendor by default if a vendor directory is
present, so all users with vendor directories will be affected — not
just those who set 'GOFLAGS' explicitly.

Similarly, an explicit '-mod=readonly' argument to 'go get' is
currently ignored as a special case, but the fact that it is ignored
(rather than rejected) can be very surprising.

Rather than adding more special cases, we should remove the '-mod'
flag from 'go get' entirely.

Fixes #30345
Fixes #32502
Updates #33848

Change-Id: Iecd3233ca3ef580ca3a66bd5e6ee8d86d4cbd8a7
Reviewed-on: https://go-review.googlesource.com/c/go/+/198438
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
doc/go1.14.html
src/cmd/go/internal/clean/clean.go
src/cmd/go/internal/generate/generate.go
src/cmd/go/internal/get/get.go
src/cmd/go/internal/list/list.go
src/cmd/go/internal/modget/get.go
src/cmd/go/internal/run/run.go
src/cmd/go/internal/test/testflag.go
src/cmd/go/internal/vet/vetflag.go
src/cmd/go/internal/work/build.go
src/cmd/go/testdata/script/mod_getmode_vendor.txt

index e68cca56df1e3528c0d6812e7ef9ba6389185c19..322481c9e36e26d529e1a5f46930dc53befb6e1a 100644 (file)
@@ -58,6 +58,13 @@ TODO
   graphic characters and spaces.
 </p>
 
+<p><!-- golang.org/issue/32502, golang.org/issue/30345 -->
+  The <code>go</code> <code>get</code> subcommand no longer accepts
+  the <code>-mod</code> flag. Previously, the flag's setting either
+  <a href="https://golang.org/issue/30345">was ignored</a> or
+  <a href="https://golang.org/issue/32502">caused the build to fail</a>.
+</p>
+
 <h2 id="runtime">Runtime</h2>
 
 <p>
index f7d80ff6dc8a13074110e28408dc54268dccbf66..5f4bf4e6c8eb022e91f46790b48047b33c8a3bc9 100644 (file)
@@ -102,7 +102,7 @@ func init() {
        // mentioned explicitly in the docs but they
        // are part of the build flags.
 
-       work.AddBuildFlags(CmdClean)
+       work.AddBuildFlags(CmdClean, work.DefaultBuildFlags)
 }
 
 func runClean(cmd *base.Command, args []string) {
index f2ae80e5dc68f5e2764c07e6f2226fba743108ee..198ca1c1b9486703aebb1c4381b2d9af23e85f13 100644 (file)
@@ -149,7 +149,7 @@ var (
 )
 
 func init() {
-       work.AddBuildFlags(CmdGenerate)
+       work.AddBuildFlags(CmdGenerate, work.DefaultBuildFlags)
        CmdGenerate.Flag.StringVar(&generateRunFlag, "run", "", "")
 }
 
index e4945fe14404b7c69c640d743659af07a9c7479d..44fd316f35370dfa1a27e6c98d553072c75844d6 100644 (file)
@@ -108,7 +108,7 @@ var (
 )
 
 func init() {
-       work.AddBuildFlags(CmdGet)
+       work.AddBuildFlags(CmdGet, work.OmitModFlag)
        CmdGet.Run = runGet // break init loop
        CmdGet.Flag.BoolVar(&Insecure, "insecure", Insecure, "")
 }
index a5f1abe64ae643a25918c6ba783069e7fd803e53..67819939e60020bde48f4a59e8b49c070d105afa 100644 (file)
@@ -287,7 +287,7 @@ For more about modules, see 'go help modules'.
 
 func init() {
        CmdList.Run = runList // break init cycle
-       work.AddBuildFlags(CmdList)
+       work.AddBuildFlags(CmdList, work.DefaultBuildFlags)
 }
 
 var (
index 1cae311c4c157b825164f2fe36fbd559fe2ebeeb..ced5abcc71b729635c0173a9cef5d6166b7fe5c3 100644 (file)
@@ -7,7 +7,6 @@ package modget
 
 import (
        "cmd/go/internal/base"
-       "cmd/go/internal/cfg"
        "cmd/go/internal/get"
        "cmd/go/internal/imports"
        "cmd/go/internal/load"
@@ -199,7 +198,7 @@ func (v *upgradeFlag) Set(s string) error {
 func (v *upgradeFlag) String() string { return "" }
 
 func init() {
-       work.AddBuildFlags(CmdGet)
+       work.AddBuildFlags(CmdGet, work.OmitModFlag)
        CmdGet.Run = runGet // break init loop
        CmdGet.Flag.BoolVar(&get.Insecure, "insecure", get.Insecure, "")
        CmdGet.Flag.Var(&getU, "u", "")
@@ -256,11 +255,6 @@ type query struct {
 }
 
 func runGet(cmd *base.Command, args []string) {
-       // -mod=readonly has no effect on "go get".
-       if cfg.BuildMod == "readonly" {
-               cfg.BuildMod = ""
-       }
-
        switch getU {
        case "", "upgrade", "patch":
                // ok
@@ -278,10 +272,6 @@ func runGet(cmd *base.Command, args []string) {
        }
        modload.LoadTests = *getT
 
-       if cfg.BuildMod == "vendor" {
-               base.Fatalf("go get: disabled by -mod=%s", cfg.BuildMod)
-       }
-
        buildList := modload.LoadBuildList()
        buildList = buildList[:len(buildList):len(buildList)] // copy on append
        versionByPath := make(map[string]string)
index 71da5adc934cdaf23c042a97d5f0c186b7b32dfa..648a87f665481be213e50a1639310ad0aae9d7e3 100644 (file)
@@ -49,7 +49,7 @@ See also: go build.
 func init() {
        CmdRun.Run = runRun // break init loop
 
-       work.AddBuildFlags(CmdRun)
+       work.AddBuildFlags(CmdRun, work.DefaultBuildFlags)
        CmdRun.Flag.Var((*base.StringsFlag)(&work.ExecCmd), "exec", "")
 }
 
index 138e1f9d2a25f435917166700c76c87a79e92755..79dc5eb2a0c0a4414d2f0cd1ecf079740dc47b2d 100644 (file)
@@ -65,7 +65,7 @@ var testFlagDefn = []*cmdflag.Defn{
 func init() {
        cmdflag.AddKnownFlags("test", testFlagDefn)
        var cmd base.Command
-       work.AddBuildFlags(&cmd)
+       work.AddBuildFlags(&cmd, work.DefaultBuildFlags)
        cmd.Flag.VisitAll(func(f *flag.Flag) {
                if f.Name == "v" {
                        // test overrides the build -v flag
index cbe7f8ce08c02d962d8f0228ec4fcded5337daf5..7179f73cfcd9dd91d224e00e462c8e1f2df7ac84 100644 (file)
@@ -114,7 +114,7 @@ func vetFlags(usage func(), args []string) (passToVet, packageNames []string) {
 
        // Add build flags to vetFlagDefn.
        var cmd base.Command
-       work.AddBuildFlags(&cmd)
+       work.AddBuildFlags(&cmd, work.DefaultBuildFlags)
        // This flag declaration is a placeholder:
        // -vettool is actually parsed by the init function above.
        cmd.Flag.StringVar(new(string), "vettool", "", "path to vet tool binary")
index 9d6fa0c25bf65408125ae2294906840275683a65..1fc47a36c745b20d98dad125c0dadab37220a1fc 100644 (file)
@@ -167,8 +167,8 @@ func init() {
 
        CmdInstall.Flag.BoolVar(&cfg.BuildI, "i", false, "")
 
-       AddBuildFlags(CmdBuild)
-       AddBuildFlags(CmdInstall)
+       AddBuildFlags(CmdBuild, DefaultBuildFlags)
+       AddBuildFlags(CmdInstall, DefaultBuildFlags)
 }
 
 // Note that flags consulted by other parts of the code
@@ -216,9 +216,16 @@ func init() {
        }
 }
 
+type BuildFlagMask int
+
+const (
+       DefaultBuildFlags BuildFlagMask = 0
+       OmitModFlag       BuildFlagMask = 1 << iota
+)
+
 // addBuildFlags adds the flags common to the build, clean, get,
 // install, list, run, and test commands.
-func AddBuildFlags(cmd *base.Command) {
+func AddBuildFlags(cmd *base.Command, mask BuildFlagMask) {
        cmd.Flag.BoolVar(&cfg.BuildA, "a", false, "")
        cmd.Flag.BoolVar(&cfg.BuildN, "n", false, "")
        cmd.Flag.IntVar(&cfg.BuildP, "p", cfg.BuildP, "")
@@ -230,7 +237,9 @@ func AddBuildFlags(cmd *base.Command) {
        cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "")
        cmd.Flag.Var(&load.BuildGcflags, "gcflags", "")
        cmd.Flag.Var(&load.BuildGccgoflags, "gccgoflags", "")
-       cmd.Flag.StringVar(&cfg.BuildMod, "mod", "", "")
+       if mask&OmitModFlag == 0 {
+               cmd.Flag.StringVar(&cfg.BuildMod, "mod", "", "")
+       }
        cmd.Flag.StringVar(&cfg.BuildContext.InstallSuffix, "installsuffix", "", "")
        cmd.Flag.Var(&load.BuildLdflags, "ldflags", "")
        cmd.Flag.BoolVar(&cfg.BuildLinkshared, "linkshared", false, "")
index 7e1f6aa323e0ec1ac81f7ecde6b2e0185f1e1745..c532cee9cbd523b1c3ed93fcdfa2819fd91796c7 100644 (file)
@@ -13,7 +13,7 @@ stdout '^golang.org/x/text v0.0.0.* .*vendor[\\/]golang.org[\\/]x[\\/]text$'
 ! go list -mod=vendor -m rsc.io/quote@latest
 stderr 'module lookup disabled by -mod=vendor'
 ! go get -mod=vendor -u
-stderr 'go get: disabled by -mod=vendor'
+stderr 'flag provided but not defined: -mod'
 
 -- go.mod --
 module x