1# example.net/pkgremoved@v0.1.0 refers to a package. 2go get example.net/pkgremoved@v0.1.0 3 4go list example.net/pkgremoved 5stdout '^example.net/pkgremoved' 6 7cp go.mod go.mod.orig 8 9 10# When we resolve a new dependency on example.net/other, 11# it will change the meaning of the path "example.net/pkgremoved" 12# from a package (at v0.1.0) to only a module (at v0.2.0). 13# 14# If we simultaneously 'get' that module at the query "patch", the module should 15# be constrained to the latest patch of its originally-selected version (v0.1.0), 16# not upgraded to the latest patch of the new transitive dependency. 17 18! go get example.net/pkgremoved@patch example.net/other@v0.1.0 19stderr '^go: example.net/other@v0.1.0 requires example.net/pkgremoved@v0.2.0, not example.net/pkgremoved@patch \(v0.1.1\)$' 20cmp go.mod.orig go.mod 21 22 23# However, we should be able to patch from a package to a module and vice-versa. 24 25# Package to module ... 26 27go get example.net/pkgremoved@v0.3.0 28go list example.net/pkgremoved 29stdout 'example.net/pkgremoved' 30 31go get example.net/pkgremoved@patch 32! go list example.net/pkgremoved 33 34# ... and module to package. 35 36go get example.net/pkgremoved@v0.4.0 37! go list example.net/pkgremoved 38 39go get example.net/pkgremoved@patch 40go list example.net/pkgremoved 41stdout 'example.net/pkgremoved' 42 43 44-- go.mod -- 45module example 46 47go 1.16 48 49replace ( 50 example.net/other v0.1.0 => ./other 51 52 example.net/pkgremoved v0.1.0 => ./prpkg 53 example.net/pkgremoved v0.1.1 => ./prpkg 54 55 example.net/pkgremoved v0.2.0 => ./prmod 56 example.net/pkgremoved v0.2.1 => ./prmod 57 58 example.net/pkgremoved v0.3.0 => ./prpkg 59 example.net/pkgremoved v0.3.1 => ./prmod 60 61 example.net/pkgremoved v0.4.0 => ./prmod 62 example.net/pkgremoved v0.4.1 => ./prpkg 63) 64-- other/go.mod -- 65module example.net/other 66 67go 1.16 68 69require example.net/pkgremoved v0.2.0 70-- other/other.go -- 71package other 72-- prpkg/go.mod -- 73module example.net/pkgremoved 74 75go 1.16 76-- prpkg/pkgremoved.go -- 77package pkgremoved 78-- prmod/go.mod -- 79module example.net/pkgremoved 80-- prmod/README.txt -- 81Package pkgremoved was removed in v0.2.0 and v0.3.1, 82and added in v0.1.0 and v0.4.1. 83