]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: make 'go list -test' report the correct import path
authorSuzy Mueller <suzmue@golang.org>
Thu, 9 Aug 2018 17:05:54 +0000 (13:05 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 10 Aug 2018 00:26:47 +0000 (00:26 +0000)
When a test variant of a package is created, the two versions cannot
share memory for the fields that contain information about their
imports, as these will be different between the two packagse.

Both the Internal.Imports and the Imports fields must be able to be
updated in the test variant without affecting the values of the
original.

Fixes golang/go#26880

Change-Id: Id61fad7d976e179c6c7711a394ce43ec8302fd7a
Reviewed-on: https://go-review.googlesource.com/128836
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/go/internal/load/test.go
src/cmd/go/testdata/script/list_test_imports.txt [new file with mode: 0644]

index 2cc7c6cb2a5a4b23618181b55b6cea7ccbcb9df3..bb9568d07e32d3f8a6d23f72e078e9e0bab6bc25 100644 (file)
@@ -342,6 +342,8 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) {
                        p1.ForTest = preal.ImportPath
                        p1.Internal.Imports = make([]*Package, len(p.Internal.Imports))
                        copy(p1.Internal.Imports, p.Internal.Imports)
+                       p1.Imports = make([]string, len(p.Imports))
+                       copy(p1.Imports, p.Imports)
                        p = p1
                        p.Target = ""
                }
diff --git a/src/cmd/go/testdata/script/list_test_imports.txt b/src/cmd/go/testdata/script/list_test_imports.txt
new file mode 100644 (file)
index 0000000..51d1ce9
--- /dev/null
@@ -0,0 +1,19 @@
+# issue 26880: list with tests has wrong variant in imports
+go list -test -f '{{.ImportPath}}:{{with .Imports}} {{join . ", "}}{{end}}' a b
+cmp stdout imports.txt
+
+-- a/a.go --
+package a; import _ "b"
+-- b/b.go --
+package b
+-- b/b_test.go --
+package b
+-- b/b_x_test.go --
+package b_test; import _ "a"
+
+-- imports.txt --
+a: b
+b:
+b.test: b [b.test], b_test [b.test], os, testing, testing/internal/testdeps
+b [b.test]:
+b_test [b.test]: a [b.test]