]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: refactor usage of `ForceUseModules`
authorIan Alexander <jitsu@google.com>
Wed, 20 Aug 2025 23:21:56 +0000 (19:21 -0400)
committerIan Alexander <jitsu@google.com>
Tue, 7 Oct 2025 16:31:44 +0000 (09:31 -0700)
This commit refactors usage of the global variable `ForceUseModules`
to the global LoaderState field of the same name.

This commit is part of the overall effort to eliminate global
modloader state.

[git-generate]
cd src/cmd/go/internal/modload
rf 'mv State.forceUseModules State.ForceUseModules'
rf 'ex { ForceUseModules -> LoaderState.ForceUseModules }'
for dir in load modcmd modget run toolchain work workcmd ; do
  cd ../${dir}
  rf 'ex {
    import "cmd/go/internal/modload";
    modload.ForceUseModules -> modload.LoaderState.ForceUseModules
  }'
done
cd ../modload
rf 'add State.initialized \
// ForceUseModules may be set to force modules to be enabled when\
// GO111MODULE=auto or to report an error when GO111MODULE=off.'
rf 'rm ForceUseModules'

Change-Id: Ibdecfd273ff672516c9eb86279e5dfc6cdecb2ea
Reviewed-on: https://go-review.googlesource.com/c/go/+/698057
Reviewed-by: Michael Matloob <matloob@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

16 files changed:
src/cmd/go/internal/load/pkg.go
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/modget/get.go
src/cmd/go/internal/modload/init.go
src/cmd/go/internal/run/run.go
src/cmd/go/internal/toolchain/select.go
src/cmd/go/internal/work/build.go
src/cmd/go/internal/workcmd/init.go
src/cmd/go/internal/workcmd/sync.go
src/cmd/go/internal/workcmd/use.go

index 1f791546f90088ed9268f2f90d351ca6fedddf23..48b2e70d74b75964c2eb580564af136c58357902 100644 (file)
@@ -3348,7 +3348,7 @@ func GoFilesPackage(ctx context.Context, opts PackageOpts, gofiles []string) *Pa
 // would cause it to be interpreted differently if it were the main module
 // (replace, exclude).
 func PackagesAndErrorsOutsideModule(ctx context.Context, opts PackageOpts, args []string) ([]*Package, error) {
-       if !modload.ForceUseModules {
+       if !modload.LoaderState.ForceUseModules {
                panic("modload.ForceUseModules must be true")
        }
        if modload.RootMode != modload.NoRoot {
index 2f4feae8f254b2054ae16ca3b3a95ec2a9afb599..6d12d689f0ff515def234fcaf6a5aec2736a623b 100644 (file)
@@ -112,7 +112,7 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) {
        modload.InitWorkfile()
 
        // Check whether modules are enabled and whether we're in a module.
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.ExplicitWriteGoMod = true
        haveExplicitArgs := len(args) > 0
 
index 172c1dda5ce8fbbe30105ce49944e4b06ce4a78f..4abae33129ab6b936fa11dbd317384ac83cbc028 100644 (file)
@@ -57,7 +57,7 @@ func runGraph(ctx context.Context, cmd *base.Command, args []string) {
        if len(args) > 0 {
                base.Fatalf("go: 'go mod graph' accepts no arguments")
        }
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NeedRoot
 
        goVersion := graphGo.String()
index 356a0569913edf28a6368c2436de28fb7788053e..618c673bf86f24ed085b20b3fbd9aaccee3bcabc 100644 (file)
@@ -43,6 +43,6 @@ func runInit(ctx context.Context, cmd *base.Command, args []string) {
                modPath = args[0]
        }
 
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.CreateModFile(ctx, modPath) // does all the hard work
 }
index 2efa33a7c343dddabd8e694cd5ce932e2f056ab4..dde70c6d74181e4e8c12d29a95fb8e17b439db25 100644 (file)
@@ -119,7 +119,7 @@ func runTidy(ctx context.Context, cmd *base.Command, args []string) {
        // those packages. In order to make 'go test' reproducible for the packages
        // that are in 'all' but outside of the main module, we must explicitly
        // request that their test dependencies be included.
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NeedRoot
 
        goVersion := tidyGo.String()
index e1a9081a95ff802d3f302ca03ecb53e6c9b766d3..bd3d8d602e2382edc3c26229ac685489f189c3aa 100644 (file)
@@ -77,7 +77,7 @@ func RunVendor(ctx context.Context, vendorE bool, vendorO string, args []string)
        if len(args) != 0 {
                base.Fatalf("go: 'go mod vendor' accepts no arguments")
        }
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NeedRoot
 
        loadOpts := modload.PackageOpts{
index d07f730c5d0dcf90747454817e80b5e879d831af..ecd25d3a40e610b0aea33fd04a46ac3ae2b99e5e 100644 (file)
@@ -50,7 +50,7 @@ func runVerify(ctx context.Context, cmd *base.Command, args []string) {
                // NOTE(rsc): Could take a module pattern.
                base.Fatalf("go: verify takes no arguments")
        }
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NeedRoot
 
        // Only verify up to GOMAXPROCS zips at once.
index 198672d8064113267fe9846c0a0f69befe8e3bc9..6c4bf8abab17ee1d0a26d6a2d5f1315c6223859b 100644 (file)
@@ -64,7 +64,7 @@ func init() {
 
 func runWhy(ctx context.Context, cmd *base.Command, args []string) {
        modload.InitWorkfile()
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NeedRoot
        modload.ExplicitWriteGoMod = true // don't write go.mod in ListModules
 
index 25dbf3972fd465368ed181210eba90257414af37..167f515be98a7dbe37adca845f3440a2b1dfab3e 100644 (file)
@@ -298,7 +298,7 @@ func runGet(ctx context.Context, cmd *base.Command, args []string) {
                base.Fatalf("go: -insecure flag is no longer supported; use GOINSECURE instead")
        }
 
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
 
        // Do not allow any updating of go.mod until we've applied
        // all the requested changes and checked that the result matches
index d7d532ec94266511b51ea2ae491d77b3b5f307c2..264c02ef6db10052fa982ea249a00e34881bec66 100644 (file)
@@ -41,10 +41,6 @@ var (
        // RootMode determines whether a module root is needed.
        RootMode Root
 
-       // ForceUseModules may be set to force modules to be enabled when
-       // GO111MODULE=auto or to report an error when GO111MODULE=off.
-       ForceUseModules bool
-
        allowMissingModuleImports bool
 
        // ExplicitWriteGoMod prevents LoadPackages, ListModules, and other functions
@@ -96,7 +92,7 @@ func EnterWorkspace(ctx context.Context) (exit func(), err error) {
 
        // Reset the state to a clean state.
        oldstate := setState(State{})
-       ForceUseModules = true
+       LoaderState.ForceUseModules = true
 
        // Load in workspace mode.
        InitWorkfile()
@@ -406,7 +402,7 @@ func Reset() {
 func setState(s State) State {
        oldState := State{
                initialized:     LoaderState.initialized,
-               forceUseModules: ForceUseModules,
+               ForceUseModules: LoaderState.ForceUseModules,
                rootMode:        RootMode,
                modRoots:        modRoots,
                modulesEnabled:  cfg.ModulesEnabled,
@@ -414,7 +410,7 @@ func setState(s State) State {
                requirements:    requirements,
        }
        LoaderState.initialized = s.initialized
-       ForceUseModules = s.forceUseModules
+       LoaderState.ForceUseModules = s.ForceUseModules
        RootMode = s.rootMode
        modRoots = s.modRoots
        cfg.ModulesEnabled = s.modulesEnabled
@@ -429,8 +425,11 @@ func setState(s State) State {
 }
 
 type State struct {
-       initialized     bool
-       forceUseModules bool
+       initialized bool
+
+       // ForceUseModules may be set to force modules to be enabled when
+       // GO111MODULE=auto or to report an error when GO111MODULE=off.
+       ForceUseModules bool
        rootMode        Root
        modRoots        []string
        modulesEnabled  bool
@@ -465,11 +464,11 @@ func Init() {
        default:
                base.Fatalf("go: unknown environment setting GO111MODULE=%s", env)
        case "auto":
-               mustUseModules = ForceUseModules
+               mustUseModules = LoaderState.ForceUseModules
        case "on", "":
                mustUseModules = true
        case "off":
-               if ForceUseModules {
+               if LoaderState.ForceUseModules {
                        base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'")
                }
                mustUseModules = false
index b81b1a007bd79df3533d2ebe9585c8ecd7c553aa..05ea5eaa15eea462bd5333fefb8369e3818d0c0d 100644 (file)
@@ -76,7 +76,7 @@ func runRun(ctx context.Context, cmd *base.Command, args []string) {
                // This must be done before modload.Init, but we need to call work.BuildInit
                // before loading packages, since it affects package locations, e.g.,
                // for -race and -msan.
-               modload.ForceUseModules = true
+               modload.LoaderState.ForceUseModules = true
                modload.RootMode = modload.NoRoot
                modload.AllowMissingModuleImports()
                modload.Init()
index e8712613366e8c8b6d9d596ac9efff23b6db2deb..8f55076c6282c20efe337512fa61364ee9820626 100644 (file)
@@ -353,7 +353,7 @@ func Exec(gotoolchain string) {
 
        // Set up modules without an explicit go.mod, to download distribution.
        modload.Reset()
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NoRoot
        modload.Init()
 
@@ -692,7 +692,7 @@ func maybeSwitchForGoInstallVersion(minVers string) {
        // command lines if we add new flags in the future.
 
        // Set up modules without an explicit go.mod, to download go.mod.
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NoRoot
        modload.Init()
        defer modload.Reset()
index 6741b39f051cd6d1165faf6f2d2e1a5e3edd568a..21bbab1bf47463e6daf908256ff5777bd991e5c7 100644 (file)
@@ -859,7 +859,7 @@ func InstallPackages(ctx context.Context, patterns []string, pkgs []*load.Packag
 //
 // See golang.org/issue/40276 for details and rationale.
 func installOutsideModule(ctx context.Context, args []string) {
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.RootMode = modload.NoRoot
        modload.AllowMissingModuleImports()
        modload.Init()
index 02240b8189fab531d6225f8f870d13fda2c07f01..52185391c115b33c55a618624b021f11b49995fd 100644 (file)
@@ -46,7 +46,7 @@ func init() {
 func runInit(ctx context.Context, cmd *base.Command, args []string) {
        modload.InitWorkfile()
 
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
 
        gowork := modload.WorkFilePath()
        if gowork == "" {
index 719cf76c9bf12ddbaccf3aa7ab35789af42df969..800dd15dd6f6d18e622d237fd0bbefdd7a785ace 100644 (file)
@@ -48,7 +48,7 @@ func init() {
 }
 
 func runSync(ctx context.Context, cmd *base.Command, args []string) {
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.InitWorkfile()
        if modload.WorkFilePath() == "" {
                base.Fatalf("go: no go.work file found\n\t(run 'go work init' first or specify path using GOWORK environment variable)")
index afbe99d3a480db54ec91e07069195a2e62d285e3..2842163517892ccca1ed5ec19c730cccb5d93474 100644 (file)
@@ -61,7 +61,7 @@ func init() {
 }
 
 func runUse(ctx context.Context, cmd *base.Command, args []string) {
-       modload.ForceUseModules = true
+       modload.LoaderState.ForceUseModules = true
        modload.InitWorkfile()
        gowork := modload.WorkFilePath()
        if gowork == "" {