From: Quan Tong Date: Wed, 11 Oct 2023 01:55:24 +0000 (+0000) Subject: cmd/go/internal/modcmd: do not copy test embed files when vendoring X-Git-Tag: go1.22rc1~568 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b78aa6c2e790f5a7405262951cd6a4919f7d315b;p=gostls13.git cmd/go/internal/modcmd: do not copy test embed files when vendoring Currently, go mod vendor copy all files matched by //go:embed, even when it is in a _test.go file. According to the documentation, it should not include test code for vendored packages. Fixes #63473 Change-Id: I28c411724fc7b7aeb683857fc114e20b08635e01 Reviewed-on: https://go-review.googlesource.com/c/go/+/534376 Auto-Submit: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Cuong Manh Le Reviewed-by: Carlos Amedee Reviewed-by: Bryan Mills --- diff --git a/src/cmd/go/internal/modcmd/vendor.go b/src/cmd/go/internal/modcmd/vendor.go index 033d47b104..e95dfbfbb7 100644 --- a/src/cmd/go/internal/modcmd/vendor.go +++ b/src/cmd/go/internal/modcmd/vendor.go @@ -313,7 +313,15 @@ func vendorPkg(vdir, pkg string) { base.Fatalf("internal error: failed to find embedded files of %s: %v\n", pkg, err) } } - embedPatterns := str.StringList(bp.EmbedPatterns, bp.TestEmbedPatterns, bp.XTestEmbedPatterns) + var embedPatterns []string + if gover.Compare(modload.MainModules.GoVersion(), "1.22") >= 0 { + embedPatterns = bp.EmbedPatterns + } else { + // Maintain the behavior of https://github.com/golang/go/issues/63473 + // so that we continue to agree with older versions of the go command + // about the contents of vendor directories in existing modules + embedPatterns = str.StringList(bp.EmbedPatterns, bp.TestEmbedPatterns, bp.XTestEmbedPatterns) + } embeds, err := load.ResolveEmbed(bp.Dir, embedPatterns) if err != nil { base.Fatal(err) diff --git a/src/cmd/go/testdata/script/mod_vendor_embed.txt b/src/cmd/go/testdata/script/mod_vendor_embed.txt index b14fd99156..1a3b2fef26 100644 --- a/src/cmd/go/testdata/script/mod_vendor_embed.txt +++ b/src/cmd/go/testdata/script/mod_vendor_embed.txt @@ -12,6 +12,36 @@ cd ../broken_bad_pattern ! go mod vendor stderr 'go: pattern ../foo.txt: invalid pattern syntax' +cd ../embed_go122 +go mod vendor +cmp vendor/example.com/a/samedir_embed.txt ../a/samedir_embed.txt +cmp vendor/example.com/a/subdir/embed.txt ../a/subdir/embed.txt +! exists vendor/example.com/a/subdir/test/embed.txt +! exists vendor/example.com/a/subdir/test/xtest/embed.txt +-- embed_go122/go.mod -- +module example.com/foo +go 1.22 + +require ( + example.com/a v0.1.0 +) + +replace ( + example.com/a v0.1.0 => ../a +) +-- embed_go122/foo.go -- +package main + +import ( + "fmt" + + "example.com/a" +) + +func main() { + fmt.Println(a.Str()) +} + # matchPotentialSourceFile prunes out tests and unbuilt code. # Make sure that they are vendored if they are embedded files. cd ../embed_unbuilt