Skip to content

Commit 8ba43ea

Browse files
author
Jay Conrod
committed
cmd/go: support -modcacherw in 'go mod' subcommands
The -modcacherw flag is now registered in work.AddModCommonFlags, which is called from work.AddBuildFlags, where it was registered before. 'go mod' subcommands register the flag by calling work.AddModCommonFlags directly. Also, build commands now exit with an error if -modcacherw is set explicitly (not in GOFLAGS) in GOPATH mode. Updates #31481 Change-Id: I461e59a51ed31b006fff4d5c57c2a866be0bbf38 Reviewed-on: https://go-review.googlesource.com/c/go/+/202563 Run-TryBot: Jay Conrod <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Bryan C. Mills <[email protected]>
1 parent 88186e5 commit 8ba43ea

File tree

14 files changed

+57
-6
lines changed

14 files changed

+57
-6
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ var (
3333
BuildN bool // -n flag
3434
BuildO string // -o flag
3535
BuildP = runtime.NumCPU() // -p flag
36-
BuildModcacheRW bool // -modcacherw flag
3736
BuildPkgdir string // -pkgdir flag
3837
BuildRace bool // -race flag
3938
BuildToolexec []string // -toolexec flag
@@ -45,6 +44,8 @@ var (
4544
BuildWork bool // -work flag
4645
BuildX bool // -x flag
4746

47+
ModCacheRW bool // -modcacherw flag
48+
4849
CmdName string // "build", "install", "list", "mod tidy", etc.
4950

5051
DebugActiongraph string // -debug-actiongraph flag (undocumented, unstable)

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, work.OmitModFlag)
111+
work.AddBuildFlags(CmdGet, work.OmitModFlag|work.OmitModCommonFlags)
112112
CmdGet.Run = runGet // break init loop
113113
CmdGet.Flag.BoolVar(&Insecure, "insecure", Insecure, "")
114114
}

src/cmd/go/internal/modcmd/download.go

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"cmd/go/internal/modload"
1515
"cmd/go/internal/module"
1616
"cmd/go/internal/par"
17+
"cmd/go/internal/work"
1718
)
1819

1920
var cmdDownload = &base.Command{
@@ -53,6 +54,8 @@ var downloadJSON = cmdDownload.Flag.Bool("json", false, "")
5354

5455
func init() {
5556
cmdDownload.Run = runDownload // break init cycle
57+
58+
work.AddModCommonFlags(cmdDownload)
5659
}
5760

5861
type moduleJSON struct {

src/cmd/go/internal/modcmd/edit.go

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"cmd/go/internal/modfile"
2121
"cmd/go/internal/modload"
2222
"cmd/go/internal/module"
23+
"cmd/go/internal/work"
2324
)
2425

2526
var cmdEdit = &base.Command{
@@ -130,6 +131,7 @@ func init() {
130131
cmdEdit.Flag.Var(flagFunc(flagReplace), "replace", "")
131132
cmdEdit.Flag.Var(flagFunc(flagDropExclude), "dropexclude", "")
132133

134+
work.AddModCommonFlags(cmdEdit)
133135
base.AddBuildFlagsNX(&cmdEdit.Flag)
134136
}
135137

src/cmd/go/internal/modcmd/graph.go

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"cmd/go/internal/modload"
1717
"cmd/go/internal/module"
1818
"cmd/go/internal/par"
19+
"cmd/go/internal/work"
1920
)
2021

2122
var cmdGraph = &base.Command{
@@ -30,6 +31,10 @@ path@version, except for the main module, which has no @version suffix.
3031
Run: runGraph,
3132
}
3233

34+
func init() {
35+
work.AddModCommonFlags(cmdGraph)
36+
}
37+
3338
func runGraph(cmd *base.Command, args []string) {
3439
if len(args) > 0 {
3540
base.Fatalf("go mod graph: graph takes no arguments")

src/cmd/go/internal/modcmd/init.go

+5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package modcmd
99
import (
1010
"cmd/go/internal/base"
1111
"cmd/go/internal/modload"
12+
"cmd/go/internal/work"
1213
"os"
1314
"strings"
1415
)
@@ -27,6 +28,10 @@ To override this guess, supply the module path as an argument.
2728
Run: runInit,
2829
}
2930

31+
func init() {
32+
work.AddModCommonFlags(cmdInit)
33+
}
34+
3035
func runInit(cmd *base.Command, args []string) {
3136
modload.CmdModInit = true
3237
if len(args) > 1 {

src/cmd/go/internal/modcmd/tidy.go

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"cmd/go/internal/modfetch"
1616
"cmd/go/internal/modload"
1717
"cmd/go/internal/module"
18+
"cmd/go/internal/work"
1819
)
1920

2021
var cmdTidy = &base.Command{
@@ -35,6 +36,7 @@ to standard error.
3536
func init() {
3637
cmdTidy.Run = runTidy // break init cycle
3738
cmdTidy.Flag.BoolVar(&cfg.BuildV, "v", false, "")
39+
work.AddModCommonFlags(cmdTidy)
3840
}
3941

4042
func runTidy(cmd *base.Command, args []string) {

src/cmd/go/internal/modcmd/vendor.go

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"cmd/go/internal/modload"
2121
"cmd/go/internal/module"
2222
"cmd/go/internal/semver"
23+
"cmd/go/internal/work"
2324
)
2425

2526
var cmdVendor = &base.Command{
@@ -38,6 +39,7 @@ modules and packages to standard error.
3839

3940
func init() {
4041
cmdVendor.Flag.BoolVar(&cfg.BuildV, "v", false, "")
42+
work.AddModCommonFlags(cmdVendor)
4143
}
4244

4345
func runVendor(cmd *base.Command, args []string) {

src/cmd/go/internal/modcmd/verify.go

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"cmd/go/internal/modfetch"
1717
"cmd/go/internal/modload"
1818
"cmd/go/internal/module"
19+
"cmd/go/internal/work"
1920
)
2021

2122
var cmdVerify = &base.Command{
@@ -32,6 +33,10 @@ non-zero status.
3233
Run: runVerify,
3334
}
3435

36+
func init() {
37+
work.AddModCommonFlags(cmdVerify)
38+
}
39+
3540
func runVerify(cmd *base.Command, args []string) {
3641
if len(args) != 0 {
3742
// NOTE(rsc): Could take a module pattern.

src/cmd/go/internal/modcmd/why.go

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"cmd/go/internal/base"
99
"cmd/go/internal/modload"
1010
"cmd/go/internal/module"
11+
"cmd/go/internal/work"
1112
"fmt"
1213
"strings"
1314
)
@@ -54,6 +55,7 @@ var (
5455

5556
func init() {
5657
cmdWhy.Run = runWhy // break init cycle
58+
work.AddModCommonFlags(cmdWhy)
5759
}
5860

5961
func runWhy(cmd *base.Command, args []string) {

src/cmd/go/internal/modfetch/fetch.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func download(mod module.Version, dir string) (err error) {
125125
return err
126126
}
127127

128-
if !cfg.BuildModcacheRW {
128+
if !cfg.ModCacheRW {
129129
// Make dir read-only only *after* renaming it.
130130
// os.Rename was observed to fail for read-only directories on macOS.
131131
makeDirsReadOnly(dir)

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

+11-2
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,10 @@ type BuildFlagMask int
224224
const (
225225
DefaultBuildFlags BuildFlagMask = 0
226226
OmitModFlag BuildFlagMask = 1 << iota
227+
OmitModCommonFlags
227228
)
228229

229-
// addBuildFlags adds the flags common to the build, clean, get,
230+
// AddBuildFlags adds the flags common to the build, clean, get,
230231
// install, list, run, and test commands.
231232
func AddBuildFlags(cmd *base.Command, mask BuildFlagMask) {
232233
cmd.Flag.BoolVar(&cfg.BuildA, "a", false, "")
@@ -243,10 +244,12 @@ func AddBuildFlags(cmd *base.Command, mask BuildFlagMask) {
243244
if mask&OmitModFlag == 0 {
244245
cmd.Flag.StringVar(&cfg.BuildMod, "mod", "", "")
245246
}
247+
if mask&OmitModCommonFlags == 0 {
248+
AddModCommonFlags(cmd)
249+
}
246250
cmd.Flag.StringVar(&cfg.BuildContext.InstallSuffix, "installsuffix", "", "")
247251
cmd.Flag.Var(&load.BuildLdflags, "ldflags", "")
248252
cmd.Flag.BoolVar(&cfg.BuildLinkshared, "linkshared", false, "")
249-
cmd.Flag.BoolVar(&cfg.BuildModcacheRW, "modcacherw", false, "")
250253
cmd.Flag.StringVar(&cfg.BuildPkgdir, "pkgdir", "", "")
251254
cmd.Flag.BoolVar(&cfg.BuildRace, "race", false, "")
252255
cmd.Flag.BoolVar(&cfg.BuildMSan, "msan", false, "")
@@ -259,6 +262,12 @@ func AddBuildFlags(cmd *base.Command, mask BuildFlagMask) {
259262
cmd.Flag.StringVar(&cfg.DebugActiongraph, "debug-actiongraph", "", "")
260263
}
261264

265+
// AddModCommonFlags adds the module-related flags common to build commands
266+
// and 'go mod' subcommands.
267+
func AddModCommonFlags(cmd *base.Command) {
268+
cmd.Flag.BoolVar(&cfg.ModCacheRW, "modcacherw", false, "")
269+
}
270+
262271
// tagsFlag is the implementation of the -tags flag.
263272
type tagsFlag []string
264273

src/cmd/go/internal/work/init.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,17 @@ func buildModeInit() {
248248
case "":
249249
// ok
250250
case "readonly", "vendor", "mod":
251-
if load.ModLookup == nil && !inGOFLAGS("-mod") {
251+
if !cfg.ModulesEnabled && !inGOFLAGS("-mod") {
252252
base.Fatalf("build flag -mod=%s only valid when using modules", cfg.BuildMod)
253253
}
254254
default:
255255
base.Fatalf("-mod=%s not supported (can be '', 'mod', 'readonly', or 'vendor')", cfg.BuildMod)
256256
}
257+
if !cfg.ModulesEnabled {
258+
if cfg.ModCacheRW && !inGOFLAGS("-modcacherw") {
259+
base.Fatalf("build flag -modcacherw only valid when using modules")
260+
}
261+
}
257262
}
258263

259264
func inGOFLAGS(flag string) bool {

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

+10
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ go get -d rsc.io/quote@latest
3333
[!windows] [!root] ! cp $WORK/extraneous.txt $GOPATH/pkg/mod/rsc.io/[email protected]/extraneous_file.go
3434
! exists $GOPATH/pkg/mod/rsc.io/[email protected]/extraneous_file.go
3535

36+
37+
# Repeat part of the test with 'go mod download' instead of 'go get' to verify
38+
# -modcacherw is supported on 'go mod' subcommands.
39+
go clean -modcache
40+
go mod download -modcacherw rsc.io/quote
41+
cp $WORK/extraneous.txt $GOPATH/pkg/mod/rsc.io/[email protected]/extraneous_file.go
42+
! go mod verify
43+
[!root] ! cp $WORK/extraneous.txt $GOPATH/pkg/mod/rsc.io/[email protected]/go.mod
44+
45+
3646
-- $WORK/extraneous.txt --
3747
module oops
3848
-- go.mod --

0 commit comments

Comments
 (0)