# This test covers a crazy edge-case involving wildcards and multiple passes of # patch-upgrades, but if we get it right we probably get many other edge-cases # right too. go list -m all stdout '^example.net/a v0.1.0 ' ! stdout '^example.net/b ' # Requesting pattern example.../b by itself fails: there is no such module # already in the build list, and the wildcard in the first element prevents us # from attempting to resolve a new module whose path is a prefix of the pattern. ! go get -u=patch example.../b@upgrade stderr '^go: no modules to query for example\.\.\./b@upgrade because first path element contains a wildcard$' # Patching . causes a patch to example.net/a, which introduces a new match # for example.net/b/..., which is itself patched and causes another upgrade to # example.net/a, which is then patched again. go get -u=patch . example.../b@upgrade go list -m all stdout '^example.net/a v0.2.1 ' # upgraded by dependency of b and -u=patch stdout '^example.net/b v0.2.0 ' # introduced by patch of a and upgraded by wildcard -- go.mod -- module example go 1.16 require example.net/a v0.1.0 replace ( example.net/a v0.1.0 => ./a10 example.net/a v0.1.1 => ./a11 example.net/a v0.2.0 => ./a20 example.net/a v0.2.1 => ./a20 example.net/b v0.1.0 => ./b1 example.net/b v0.1.1 => ./b1 example.net/b v0.2.0 => ./b2 ) -- example.go -- package example import _ "example.net/a" -- a10/go.mod -- module example.net/a go 1.16 -- a10/a.go -- package a -- a11/go.mod -- module example.net/a go 1.16 require example.net/b v0.1.0 -- a11/a.go -- package a -- a11/unimported/unimported.go -- package unimported import _ "example.net/b" -- a20/go.mod -- module example.net/a go 1.16 -- a20/a.go -- package a -- b1/go.mod -- module example.net/b go 1.16 -- b1/b.go -- package b -- b2/go.mod -- module example.net/b go 1.16 require example.net/a v0.2.0 -- b2/b.go -- package b -- b2/b_test.go -- package b_test import _ "example.net/a"