]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: avoid setting mod=vendor in workspace mode
authorMichael Matloob <matloob@golang.org>
Wed, 5 Oct 2022 23:06:23 +0000 (19:06 -0400)
committerMichael Matloob <matloob@golang.org>
Thu, 13 Oct 2022 20:22:29 +0000 (20:22 +0000)
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 <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Michael Matloob <matloob@golang.org>

src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/work_disablevendor.txt [new file with mode: 0644]

index 06be18405d2037a738ad46138c1bd12820f863a8..6242d9e9c8893655d318c3f001d491546329a88b 100644 (file)
@@ -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 (file)
index 0000000..c4c580b
--- /dev/null
@@ -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")
+}