blob: bbb0772303db726bd4eff0fe03a73b624a9efe63 [file] [log] [blame]
cp go.mod go.mod.old
go mod tidy
cmp go.mod go.mod.old
# In Go 1.14 mode, 'go list -m all' includes modules needed by the
# transitive closure of tests of dependencies of tests of dependencies of ….
go list -m all
stdout 'example.com/b v0.1.0'
stdout 'example.com/c v0.1.0'
cmp go.mod go.mod.old
# 'go test' (or equivalent) of any such dependency, no matter how remote, does
# not update the go.mod file.
go list all
stdout example.com/a/x
stdout example.com/b # Test dependency of example.com/a/x.
stdout example.com/c # Test dependency of example.com/b.
go list -test -deps all
stdout example.com/b
stdout example.com/c
cmp go.mod go.mod.old
[!short] go test example.com/a/x
[!short] cmp go.mod go.mod.old
[!short] go test example.com/b
[!short] cmp go.mod go.mod.old
# TODO(#36460):
# After changing to 'go 1.15` uniformly, 'go list -m all' should prune out
# example.com/c, because it is not imported by any package (or test of a package)
# transitively imported by the main module.
# example.com/a/x is transitively imported,
# and example.com/b is needed in order to run 'go test example.com/a/x',
# but example.com/c is not needed because we don't expect the user to need to run
# 'go test example.com/b'.
-- go.mod --
module example.com/lazy
go 1.14
require example.com/a v0.1.0
replace (
example.com/a v0.1.0 => ./a
example.com/b v0.1.0 => ./b1
example.com/b v0.2.0 => ./b2
example.com/c v0.1.0 => ./c1
example.com/c v0.2.0 => ./c2
)
-- lazy.go --
package lazy
import (
_ "example.com/a/x"
)
-- a/go.mod --
module example.com/a
go 1.14
require example.com/b v0.1.0
-- a/x/x.go --
package x
-- a/x/x_test.go --
package x
import (
"testing"
_ "example.com/b"
)
func TestUsingB(t *testing.T) {
// …
}
-- b1/go.mod --
module example.com/b
go 1.14
require example.com/c v0.1.0
-- b1/b.go --
package b
-- b1/b_test.go --
package b
import _ "example.com/c"
-- b2/go.mod --
module example.com/b
go 1.14
require example.com/c v0.1.0
-- b2/b.go --
package b
This file should not be used, so this syntax error should be ignored.
-- b2/b_test.go --
package b
This file should not be used, so this syntax error should be ignored.
-- c1/go.mod --
module example.com/c
go 1.14
-- c1/c.go --
package c
-- c2/go.mod --
module example.com/c
go 1.14
-- c2/c.go --
package c
This file should not be used, so this syntax error should be ignored.