Skip to content

Commit 6145a80

Browse files
author
Bryan C. Mills
committed
cmd/go: remove the -mod flag from 'go get'
'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 <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
1 parent c1e46af commit 6145a80

File tree

11 files changed

+29
-23
lines changed

11 files changed

+29
-23
lines changed

doc/go1.14.html

+7
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ <h3 id="go-command">Go command</h3>
5858
graphic characters and spaces.
5959
</p>
6060

61+
<p><!-- golang.org/issue/32502, golang.org/issue/30345 -->
62+
The <code>go</code> <code>get</code> subcommand no longer accepts
63+
the <code>-mod</code> flag. Previously, the flag's setting either
64+
<a href="https://golang.org/issue/30345">was ignored</a> or
65+
<a href="https://golang.org/issue/32502">caused the build to fail</a>.
66+
</p>
67+
6168
<h2 id="runtime">Runtime</h2>
6269

6370
<p>

src/cmd/go/internal/clean/clean.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func init() {
102102
// mentioned explicitly in the docs but they
103103
// are part of the build flags.
104104

105-
work.AddBuildFlags(CmdClean)
105+
work.AddBuildFlags(CmdClean, work.DefaultBuildFlags)
106106
}
107107

108108
func runClean(cmd *base.Command, args []string) {

src/cmd/go/internal/generate/generate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ var (
149149
)
150150

151151
func init() {
152-
work.AddBuildFlags(CmdGenerate)
152+
work.AddBuildFlags(CmdGenerate, work.DefaultBuildFlags)
153153
CmdGenerate.Flag.StringVar(&generateRunFlag, "run", "", "")
154154
}
155155

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ var (
108108
)
109109

110110
func init() {
111-
work.AddBuildFlags(CmdGet)
111+
work.AddBuildFlags(CmdGet, work.OmitModFlag)
112112
CmdGet.Run = runGet // break init loop
113113
CmdGet.Flag.BoolVar(&Insecure, "insecure", Insecure, "")
114114
}

src/cmd/go/internal/list/list.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ For more about modules, see 'go help modules'.
287287

288288
func init() {
289289
CmdList.Run = runList // break init cycle
290-
work.AddBuildFlags(CmdList)
290+
work.AddBuildFlags(CmdList, work.DefaultBuildFlags)
291291
}
292292

293293
var (

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

+1-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package modget
77

88
import (
99
"cmd/go/internal/base"
10-
"cmd/go/internal/cfg"
1110
"cmd/go/internal/get"
1211
"cmd/go/internal/imports"
1312
"cmd/go/internal/load"
@@ -199,7 +198,7 @@ func (v *upgradeFlag) Set(s string) error {
199198
func (v *upgradeFlag) String() string { return "" }
200199

201200
func init() {
202-
work.AddBuildFlags(CmdGet)
201+
work.AddBuildFlags(CmdGet, work.OmitModFlag)
203202
CmdGet.Run = runGet // break init loop
204203
CmdGet.Flag.BoolVar(&get.Insecure, "insecure", get.Insecure, "")
205204
CmdGet.Flag.Var(&getU, "u", "")
@@ -256,11 +255,6 @@ type query struct {
256255
}
257256

258257
func runGet(cmd *base.Command, args []string) {
259-
// -mod=readonly has no effect on "go get".
260-
if cfg.BuildMod == "readonly" {
261-
cfg.BuildMod = ""
262-
}
263-
264258
switch getU {
265259
case "", "upgrade", "patch":
266260
// ok
@@ -278,10 +272,6 @@ func runGet(cmd *base.Command, args []string) {
278272
}
279273
modload.LoadTests = *getT
280274

281-
if cfg.BuildMod == "vendor" {
282-
base.Fatalf("go get: disabled by -mod=%s", cfg.BuildMod)
283-
}
284-
285275
buildList := modload.LoadBuildList()
286276
buildList = buildList[:len(buildList):len(buildList)] // copy on append
287277
versionByPath := make(map[string]string)

src/cmd/go/internal/run/run.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ See also: go build.
4949
func init() {
5050
CmdRun.Run = runRun // break init loop
5151

52-
work.AddBuildFlags(CmdRun)
52+
work.AddBuildFlags(CmdRun, work.DefaultBuildFlags)
5353
CmdRun.Flag.Var((*base.StringsFlag)(&work.ExecCmd), "exec", "")
5454
}
5555

src/cmd/go/internal/test/testflag.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ var testFlagDefn = []*cmdflag.Defn{
6565
func init() {
6666
cmdflag.AddKnownFlags("test", testFlagDefn)
6767
var cmd base.Command
68-
work.AddBuildFlags(&cmd)
68+
work.AddBuildFlags(&cmd, work.DefaultBuildFlags)
6969
cmd.Flag.VisitAll(func(f *flag.Flag) {
7070
if f.Name == "v" {
7171
// test overrides the build -v flag

src/cmd/go/internal/vet/vetflag.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func vetFlags(usage func(), args []string) (passToVet, packageNames []string) {
114114

115115
// Add build flags to vetFlagDefn.
116116
var cmd base.Command
117-
work.AddBuildFlags(&cmd)
117+
work.AddBuildFlags(&cmd, work.DefaultBuildFlags)
118118
// This flag declaration is a placeholder:
119119
// -vettool is actually parsed by the init function above.
120120
cmd.Flag.StringVar(new(string), "vettool", "", "path to vet tool binary")

src/cmd/go/internal/work/build.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ func init() {
167167

168168
CmdInstall.Flag.BoolVar(&cfg.BuildI, "i", false, "")
169169

170-
AddBuildFlags(CmdBuild)
171-
AddBuildFlags(CmdInstall)
170+
AddBuildFlags(CmdBuild, DefaultBuildFlags)
171+
AddBuildFlags(CmdInstall, DefaultBuildFlags)
172172
}
173173

174174
// Note that flags consulted by other parts of the code
@@ -216,9 +216,16 @@ func init() {
216216
}
217217
}
218218

219+
type BuildFlagMask int
220+
221+
const (
222+
DefaultBuildFlags BuildFlagMask = 0
223+
OmitModFlag BuildFlagMask = 1 << iota
224+
)
225+
219226
// addBuildFlags adds the flags common to the build, clean, get,
220227
// install, list, run, and test commands.
221-
func AddBuildFlags(cmd *base.Command) {
228+
func AddBuildFlags(cmd *base.Command, mask BuildFlagMask) {
222229
cmd.Flag.BoolVar(&cfg.BuildA, "a", false, "")
223230
cmd.Flag.BoolVar(&cfg.BuildN, "n", false, "")
224231
cmd.Flag.IntVar(&cfg.BuildP, "p", cfg.BuildP, "")
@@ -230,7 +237,9 @@ func AddBuildFlags(cmd *base.Command) {
230237
cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "")
231238
cmd.Flag.Var(&load.BuildGcflags, "gcflags", "")
232239
cmd.Flag.Var(&load.BuildGccgoflags, "gccgoflags", "")
233-
cmd.Flag.StringVar(&cfg.BuildMod, "mod", "", "")
240+
if mask&OmitModFlag == 0 {
241+
cmd.Flag.StringVar(&cfg.BuildMod, "mod", "", "")
242+
}
234243
cmd.Flag.StringVar(&cfg.BuildContext.InstallSuffix, "installsuffix", "", "")
235244
cmd.Flag.Var(&load.BuildLdflags, "ldflags", "")
236245
cmd.Flag.BoolVar(&cfg.BuildLinkshared, "linkshared", false, "")

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ stdout '^golang.org/x/text v0.0.0.* .*vendor[\\/]golang.org[\\/]x[\\/]text$'
1313
! go list -mod=vendor -m rsc.io/quote@latest
1414
stderr 'module lookup disabled by -mod=vendor'
1515
! go get -mod=vendor -u
16-
stderr 'go get: disabled by -mod=vendor'
16+
stderr 'flag provided but not defined: -mod'
1717

1818
-- go.mod --
1919
module x

0 commit comments

Comments
 (0)