59
59
// EnterModule resets MainModules and requirements to refer to just this one module.
60
60
func EnterModule (ctx context.Context , enterModroot string ) {
61
61
LoaderState .MainModules = nil // reset MainModules
62
- requirements = nil
62
+ LoaderState . requirements = nil
63
63
workFilePath = "" // Force module mode
64
64
modfetch .Reset ()
65
65
@@ -90,7 +90,7 @@ func EnterWorkspace(ctx context.Context) (exit func(), err error) {
90
90
91
91
// Update the content of the previous main module, and recompute the requirements.
92
92
* LoaderState .MainModules .ModFile (mm ) = * updatedmodfile
93
- requirements = requirementsFromModFiles (ctx , LoaderState .MainModules .workFile , slices .Collect (maps .Values (LoaderState .MainModules .modFiles )), nil )
93
+ LoaderState . requirements = requirementsFromModFiles (ctx , LoaderState .MainModules .workFile , slices .Collect (maps .Values (LoaderState .MainModules .modFiles )), nil )
94
94
95
95
return func () {
96
96
setState (oldstate )
@@ -395,15 +395,15 @@ func setState(s State) State {
395
395
modRoots : LoaderState .modRoots ,
396
396
modulesEnabled : cfg .ModulesEnabled ,
397
397
MainModules : LoaderState .MainModules ,
398
- requirements : requirements ,
398
+ requirements : LoaderState . requirements ,
399
399
}
400
400
LoaderState .initialized = s .initialized
401
401
LoaderState .ForceUseModules = s .ForceUseModules
402
402
LoaderState .RootMode = s .RootMode
403
403
LoaderState .modRoots = s .modRoots
404
404
cfg .ModulesEnabled = s .modulesEnabled
405
405
LoaderState .MainModules = s .MainModules
406
- requirements = s .requirements
406
+ LoaderState . requirements = s .requirements
407
407
workFilePath = s .workFilePath
408
408
// The modfetch package's global state is used to compute
409
409
// the go.sum file, so save and restore it along with the
@@ -430,9 +430,20 @@ type State struct {
430
430
modRoots []string
431
431
modulesEnabled bool
432
432
MainModules * MainModuleSet
433
- requirements * Requirements
434
- workFilePath string
435
- modfetchState modfetch.State
433
+
434
+ // requirements is the requirement graph for the main module.
435
+ //
436
+ // It is always non-nil if the main module's go.mod file has been
437
+ // loaded.
438
+ //
439
+ // This variable should only be read from the loadModFile
440
+ // function, and should only be written in the loadModFile and
441
+ // commitRequirements functions. All other functions that need or
442
+ // produce a *Requirements should accept and/or return an explicit
443
+ // parameter.
444
+ requirements * Requirements
445
+ workFilePath string
446
+ modfetchState modfetch.State
436
447
}
437
448
438
449
func NewState () * State { return & State {} }
@@ -869,8 +880,8 @@ func LoadModFile(ctx context.Context) *Requirements {
869
880
}
870
881
871
882
func loadModFile (ctx context.Context , opts * PackageOpts ) (* Requirements , error ) {
872
- if requirements != nil {
873
- return requirements , nil
883
+ if LoaderState . requirements != nil {
884
+ return LoaderState . requirements , nil
874
885
}
875
886
876
887
Init ()
@@ -939,14 +950,14 @@ func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error)
939
950
}
940
951
}
941
952
rawGoVersion .Store (mainModule , goVersion )
942
- requirements = newRequirements (pruning , roots , direct )
953
+ LoaderState . requirements = newRequirements (pruning , roots , direct )
943
954
if cfg .BuildMod == "vendor" {
944
955
// For issue 56536: Some users may have GOFLAGS=-mod=vendor set.
945
956
// Make sure it behaves as though the fake module is vendored
946
957
// with no dependencies.
947
- requirements .initVendor (nil )
958
+ LoaderState . requirements .initVendor (nil )
948
959
}
949
- return requirements , nil
960
+ return LoaderState . requirements , nil
950
961
}
951
962
952
963
var modFiles []* modfile.File
@@ -1035,7 +1046,7 @@ func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error)
1035
1046
1036
1047
if inWorkspaceMode () {
1037
1048
// We don't need to update the mod file so return early.
1038
- requirements = rs
1049
+ LoaderState . requirements = rs
1039
1050
return rs , nil
1040
1051
}
1041
1052
@@ -1081,8 +1092,8 @@ func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error)
1081
1092
}
1082
1093
}
1083
1094
1084
- requirements = rs
1085
- return requirements , nil
1095
+ LoaderState . requirements = rs
1096
+ return LoaderState . requirements , nil
1086
1097
}
1087
1098
1088
1099
func errWorkTooOld (gomod string , wf * modfile.WorkFile , goVers string ) error {
@@ -1162,7 +1173,7 @@ func CreateModFile(ctx context.Context, modPath string) {
1162
1173
if err != nil {
1163
1174
base .Fatal (err )
1164
1175
}
1165
- requirements = rs
1176
+ LoaderState . requirements = rs
1166
1177
if err := commitRequirements (ctx , WriteOpts {}); err != nil {
1167
1178
base .Fatal (err )
1168
1179
}
@@ -1801,7 +1812,7 @@ type WriteOpts struct {
1801
1812
1802
1813
// WriteGoMod writes the current build list back to go.mod.
1803
1814
func WriteGoMod (ctx context.Context , opts WriteOpts ) error {
1804
- requirements = LoadModFile (ctx )
1815
+ LoaderState . requirements = LoadModFile (ctx )
1805
1816
return commitRequirements (ctx , opts )
1806
1817
}
1807
1818
@@ -1828,7 +1839,7 @@ func UpdateGoModFromReqs(ctx context.Context, opts WriteOpts) (before, after []b
1828
1839
var list []* modfile.Require
1829
1840
toolchain := ""
1830
1841
goVersion := ""
1831
- for _ , m := range requirements .rootModules {
1842
+ for _ , m := range LoaderState . requirements .rootModules {
1832
1843
if m .Path == "go" {
1833
1844
goVersion = m .Version
1834
1845
continue
@@ -1839,7 +1850,7 @@ func UpdateGoModFromReqs(ctx context.Context, opts WriteOpts) (before, after []b
1839
1850
}
1840
1851
list = append (list , & modfile.Require {
1841
1852
Mod : m ,
1842
- Indirect : ! requirements .direct [m .Path ],
1853
+ Indirect : ! LoaderState . requirements .direct [m .Path ],
1843
1854
})
1844
1855
}
1845
1856
@@ -1913,7 +1924,7 @@ func commitRequirements(ctx context.Context, opts WriteOpts) (err error) {
1913
1924
if inWorkspaceMode () {
1914
1925
// go.mod files aren't updated in workspace mode, but we still want to
1915
1926
// update the go.work.sum file.
1916
- return modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , requirements , addBuildListZipSums ), mustHaveCompleteRequirements ())
1927
+ return modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , LoaderState . requirements , addBuildListZipSums ), mustHaveCompleteRequirements ())
1917
1928
}
1918
1929
_ , updatedGoMod , modFile , err := UpdateGoModFromReqs (ctx , opts )
1919
1930
if err != nil {
@@ -1937,7 +1948,7 @@ func commitRequirements(ctx context.Context, opts WriteOpts) (err error) {
1937
1948
// Don't write go.mod, but write go.sum in case we added or trimmed sums.
1938
1949
// 'go mod init' shouldn't write go.sum, since it will be incomplete.
1939
1950
if cfg .CmdName != "mod init" {
1940
- if err := modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , requirements , addBuildListZipSums ), mustHaveCompleteRequirements ()); err != nil {
1951
+ if err := modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , LoaderState . requirements , addBuildListZipSums ), mustHaveCompleteRequirements ()); err != nil {
1941
1952
return err
1942
1953
}
1943
1954
}
@@ -1960,7 +1971,7 @@ func commitRequirements(ctx context.Context, opts WriteOpts) (err error) {
1960
1971
// 'go mod init' shouldn't write go.sum, since it will be incomplete.
1961
1972
if cfg .CmdName != "mod init" {
1962
1973
if err == nil {
1963
- err = modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , requirements , addBuildListZipSums ), mustHaveCompleteRequirements ())
1974
+ err = modfetch .WriteGoSum (ctx , keepSums (ctx , loaded , LoaderState . requirements , addBuildListZipSums ), mustHaveCompleteRequirements ())
1964
1975
}
1965
1976
}
1966
1977
}()
0 commit comments