]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modload: remove SetBuildList
authorBryan C. Mills <bcmills@google.com>
Wed, 18 Nov 2020 04:16:30 +0000 (23:16 -0500)
committerBryan C. Mills <bcmills@google.com>
Thu, 19 Nov 2020 04:02:59 +0000 (04:02 +0000)
For the last remaining call site (in cmd/go/internal/work, added for
the new 'go install pkg@version' codepath in CL 254365), use
EditBuildList instead.

SetBuildList assumes that the caller has enough information to produce
a complete, coherent build list. With lazy loading, producing a
complete, coherent build list is no longer quite so trivial.

In CL 263267, I rewrote the main caller of SetBuildList (the 'go get'
command), and in the process added a more targeted modload hook
(EditBuildList). That hook also suffices for 'go install pkg@version'.
The resulting error messages are perhaps not as smooth as they ought
to be, but if they are too awkward we should probably fix them for
'go get' too, and the commands can continue to share the edit hook.

For #36460
Updates #40276

Change-Id: I698a9dcd2efe6378a4d91f21362880aa8e50001b
Reviewed-on: https://go-review.googlesource.com/c/go/+/270980
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/internal/modload/buildlist.go
src/cmd/go/internal/modload/mvs.go
src/cmd/go/internal/work/build.go
src/cmd/go/testdata/script/mod_install_pkg_version.txt

index 4aaaa8d206527b07c922fc3c9176945d6711e462..5b9984a49248ce4667bef4a4c2119821e943fa67 100644 (file)
@@ -73,13 +73,6 @@ func Selected(path string) (version string) {
        return ""
 }
 
-// SetBuildList sets the module build list.
-// The caller is responsible for ensuring that the list is valid.
-// SetBuildList does not retain a reference to the original list.
-func SetBuildList(list []module.Version) {
-       buildList = append([]module.Version{}, list...)
-}
-
 // EditBuildList edits the global build list by first adding every module in add
 // to the existing build list, then adjusting versions (and adding or removing
 // requirements as needed) until every module in mustSelect is selected at the
@@ -222,7 +215,7 @@ type Conflict struct {
 }
 
 // ReloadBuildList resets the state of loaded packages, then loads and returns
-// the build list set in SetBuildList.
+// the build list set by EditBuildList.
 func ReloadBuildList() []module.Version {
        loaded = loadFromRoots(loaderParams{
                PackageOpts: PackageOpts{
index 02b13cdd053499f816baabadbf376efa9d93d989..db57b3ec5fe4c18abc26324d2406e83d1299edf2 100644 (file)
@@ -24,7 +24,7 @@ type mvsReqs struct {
 }
 
 // Reqs returns the current module requirement graph.
-// Future calls to SetBuildList do not affect the operation
+// Future calls to EditBuildList do not affect the operation
 // of the returned Reqs.
 func Reqs() mvs.Reqs {
        r := &mvsReqs{
index 7e26d4e6a375ac96626c567d8dc115c44810ae2f..0f91a86311d57b1e8ced2e805a0754766f8c64d4 100644 (file)
@@ -789,10 +789,12 @@ func installOutsideModule(ctx context.Context, args []string) {
                base.Fatalf(directiveFmt, args[0], installMod, "exclude")
        }
 
-       // Initialize the build list using a dummy main module that requires the
-       // module providing the packages on the command line.
-       target := module.Version{Path: "go-install-target"}
-       modload.SetBuildList([]module.Version{target, installMod})
+       // Since we are in NoRoot mode, the build list initially contains only
+       // the dummy command-line-arguments module. Add a requirement on the
+       // module that provides the packages named on the command line.
+       if err := modload.EditBuildList(ctx, nil, []module.Version{installMod}); err != nil {
+               base.Fatalf("go install %s: %v", args[0], err)
+       }
 
        // Load packages for all arguments. Ignore non-main packages.
        // Print a warning if an argument contains "..." and matches no main packages.
index 93318b6659d4e3c0f3ff4c2f328a1b8ca442bff5..e4a7668351898242c4ebb2dc5c4d57e7c957f739 100644 (file)
@@ -159,7 +159,7 @@ cmp stderr exclude-err
 # 'go install pkg@version' should report an error if the module requires a
 # higher version of itself.
 ! go install example.com/cmd/a@v1.0.0-newerself
-stderr '^go install: example.com/cmd@v1.0.0-newerself: module requires a higher version of itself \(v1.0.0\)$'
+stderr '^go install example.com/cmd/a@v1.0.0-newerself: version constraints conflict:\n\texample.com/cmd@v1.0.0-newerself requires example.com/cmd@v1.0.0, but example.com/cmd@v1.0.0-newerself is requested$'
 
 
 # 'go install pkg@version' will only match a retracted version if it's