From 005c78d8bbf6389d482a0bbb4e6c46719d77f59f Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 5 Oct 2022 19:06:23 -0400 Subject: [PATCH] cmd/go: avoid setting mod=vendor in workspace mode Workspaces with a single module would enter mod=vendor mode even when in workspace mode. Fix that by explicitly checking that we're not in workspace mode when deciding whether to enter vendor mode. Fixes #54130 Change-Id: I03fcd9db4160c9872aa2b7957a80f24d49f787d0 Reviewed-on: https://go-review.googlesource.com/c/go/+/439415 TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills Run-TryBot: Michael Matloob --- src/cmd/go/internal/modload/init.go | 2 +- .../go/testdata/script/work_disablevendor.txt | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/work_disablevendor.txt diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index 06be18405d..6242d9e9c8 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -1154,7 +1154,7 @@ func setDefaultBuildMod() { return } - if len(modRoots) == 1 { + if len(modRoots) == 1 && !inWorkspaceMode() { index := MainModules.GetSingleIndexOrNil() if fi, err := fsys.Stat(filepath.Join(modRoots[0], "vendor")); err == nil && fi.IsDir() { modGo := "unspecified" diff --git a/src/cmd/go/testdata/script/work_disablevendor.txt b/src/cmd/go/testdata/script/work_disablevendor.txt new file mode 100644 index 0000000000..c4c580b2bb --- /dev/null +++ b/src/cmd/go/testdata/script/work_disablevendor.txt @@ -0,0 +1,56 @@ +# Test that mod=vendor is disabled in workspace mode, even +# with a single workspace module. + +cd workspace + +# Base case: ensure the module would default to mod=vendor +# outside of workspace mode. +env GOWORK=off +go list -f '{{.Dir}}' example.com/dep +stdout $GOPATH[\\/]src[\\/]workspace[\\/]vendor[\\/]example.com[\\/]dep + +# Test case: endure the module does not enter mod=vendor outside +# worspace mode. +env GOWORK='' +go list -f '{{.Dir}}' example.com/dep +stdout $GOPATH[\\/]src[\\/]dep + +-- workspace/go.work -- +use . +replace example.com/dep => ../dep +-- workspace/main.go -- +package main + +import "example.com/dep" + +func main() { + dep.Dep() +} +-- workspace/go.mod -- +module example.com/mod + +go 1.20 + +require example.com/dep v1.0.0 +-- workspace/vendor/example.com/dep/dep.go -- +package dep + +import "fmt" + +func Dep() { + fmt.Println("the vendored dep") +} +-- workspace/vendor/modules.txt -- +# example.com/dep v1.0.0 +## explicit +example.com/dep +-- dep/go.mod -- +module example.com/dep +-- dep/dep.go -- +package dep + +import "fmt" + +func Dep () { + fmt.Println("the real dep") +} -- 2.50.0