aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorIan Alexander <jitsu@google.com>2025-11-15 23:08:02 -0500
committerIan Alexander <jitsu@google.com>2025-11-24 20:43:56 -0800
commitd3e11b3f9011a08600a14fdbb94a9ca9da970344 (patch)
treed5726e7253f331492d398bc2fa8c35f5c46321f6 /src/cmd
parent2f7fd5714f6e7ba095d7322b656e6d65ba4fbeca (diff)
downloadgo-d3e11b3f9011a08600a14fdbb94a9ca9da970344.tar.xz
cmd/go/internal/modload: make State.modfetchState a pointer
This change aligns modfetch.State with modload.State by using pointer parameters and receivers. [git-generate] cd src/cmd/go/internal/modload sed -i ' s/oldState/old/ s/old := State{/old = \&State{/ s/func (s \*State) setState(new State) State {/func (s *State) setState(new *State) (old *State) {/ s/setState(State{})/setState(NewState())/ ' init.go cd ../modfetch sed -i ' s/oldState = State{/oldState = \&State{/ s/func SetState(newState State) (oldState State) {/func SetState(newState *State) (oldState *State) {/ s/SetState(State{})/SetState(NewState())/ ' fetch.go cd ../modload sed -i ' s/old.modfetchState = modfetch.SetState(new.modfetchState)/_ = modfetch.SetState(\&new.modfetchState)/ ' init.go rf ' # # Prepare to swap the existing modfetchState field for a pointer type # mv State.modfetchState State.modfetchState_ add State:/modfetchState_/+0 modfetchState *modfetch.State # # Update State.setState to set & restore additional values # add State.setState:/s\.requirements,/+0 workFilePath: s.workFilePath, add State.setState:/s\.workFilePath,/+0 modfetchState: s.modfetchState, # # Swap the existing modfetchState field for a pointer type # add init.go:/.* = modfetch.SetState\(.*\)/-0 s.modfetchState = new.modfetchState add init.go:/.* = modfetch.SetState\(.*\)/-0 old.modfetchState = modfetch.SetState(s.modfetchState) // TODO(jitsu): remove after completing global state elimination rm init.go:/_ = modfetch.SetState\(.*\)/ rm State.modfetchState_ ' sed -i ' s/return &State{}/s := new(State)\ns.modfetchState = modfetch.NewState()\nreturn s/ ' init.go go fmt Change-Id: I0602ecf976fd3ee93844e77989291d729ad71595 Reviewed-on: https://go-review.googlesource.com/c/go/+/720900 Reviewed-by: Michael Matloob <matloob@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Mark Freeman <markfreeman@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/internal/modfetch/fetch.go6
-rw-r--r--src/cmd/go/internal/modload/init.go24
2 files changed, 19 insertions, 11 deletions
diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go
index 87ea829180..8a17a374d0 100644
--- a/src/cmd/go/internal/modfetch/fetch.go
+++ b/src/cmd/go/internal/modfetch/fetch.go
@@ -503,14 +503,14 @@ func (s *State) AddWorkspaceGoSumFile(file string) {
// Reset resets globals in the modfetch package, so previous loads don't affect
// contents of go.sum files.
func Reset() {
- SetState(State{})
+ SetState(NewState())
}
// SetState sets the global state of the modfetch package to the newState, and returns the previous
// global state. newState should have been returned by SetState, or be an empty State.
// There should be no concurrent calls to any of the exported functions of this package with
// a call to SetState because it will modify the global state in a non-thread-safe way.
-func SetState(newState State) (oldState State) {
+func SetState(newState *State) (oldState *State) {
if newState.lookupCache == nil {
newState.lookupCache = new(par.Cache[lookupCacheKey, Repo])
}
@@ -521,7 +521,7 @@ func SetState(newState State) (oldState State) {
goSum.mu.Lock()
defer goSum.mu.Unlock()
- oldState = State{
+ oldState = &State{
goSumFile: ModuleFetchState.goSumFile,
workspaceGoSumFiles: ModuleFetchState.workspaceGoSumFiles,
lookupCache: ModuleFetchState.lookupCache,
diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go
index ad7b08e062..4680ea427e 100644
--- a/src/cmd/go/internal/modload/init.go
+++ b/src/cmd/go/internal/modload/init.go
@@ -80,7 +80,7 @@ func EnterWorkspace(loaderstate *State, ctx context.Context) (exit func(), err e
}
// Reset the state to a clean state.
- oldstate := loaderstate.setState(State{})
+ oldstate := loaderstate.setState(NewState())
loaderstate.ForceUseModules = true
// Load in workspace mode.
@@ -385,11 +385,11 @@ func WorkFilePath(loaderstate *State) string {
// Reset clears all the initialized, cached state about the use of modules,
// so that we can start over.
func (s *State) Reset() {
- s.setState(State{})
+ s.setState(NewState())
}
-func (s *State) setState(new State) State {
- oldState := State{
+func (s *State) setState(new *State) (old *State) {
+ old = &State{
initialized: s.initialized,
ForceUseModules: s.ForceUseModules,
RootMode: s.RootMode,
@@ -397,6 +397,8 @@ func (s *State) setState(new State) State {
modulesEnabled: cfg.ModulesEnabled,
MainModules: s.MainModules,
requirements: s.requirements,
+ workFilePath: s.workFilePath,
+ modfetchState: s.modfetchState,
}
s.initialized = new.initialized
s.ForceUseModules = new.ForceUseModules
@@ -409,8 +411,10 @@ func (s *State) setState(new State) State {
// The modfetch package's global state is used to compute
// the go.sum file, so save and restore it along with the
// modload state.
- oldState.modfetchState = modfetch.SetState(new.modfetchState)
- return oldState
+ s.modfetchState = new.modfetchState
+ old.modfetchState = modfetch.SetState(s.modfetchState) // TODO(jitsu): remove after completing global state elimination
+
+ return old
}
type State struct {
@@ -448,10 +452,14 @@ type State struct {
// Set to the path to the go.work file, or "" if workspace mode is
// disabled
workFilePath string
- modfetchState modfetch.State
+ modfetchState *modfetch.State
}
-func NewState() *State { return &State{} }
+func NewState() *State {
+ s := new(State)
+ s.modfetchState = modfetch.NewState()
+ return s
+}
// Init determines whether module mode is enabled, locates the root of the
// current module (if any), sets environment variables for Git subprocesses, and