| cp go.mod go.mod.orig |
| |
| env oldGOPROXY=$GOPROXY |
| |
| # If a wildcard replacement exists for an otherwise-nonexistent module, |
| # 'go get' should resolve it to the minimum valid pseudo-version. |
| |
| go mod edit -replace=example.com/x=./x |
| go get -d example.com/x |
| |
| go list -m example.com/x |
| stdout '^example.com/x v0.0.0-00010101000000-000000000000 ' |
| |
| # If specific-version replacements exist, the highest matching version should be used. |
| go mod edit -replace=example.com/x@v0.1.0=./x |
| go mod edit -replace=example.com/x@v0.2.0=./x |
| |
| go get -d example.com/x |
| go list -m example.com/x |
| stdout '^example.com/x v0.2.0 ' |
| |
| go get -d example.com/x@<v0.2.0 |
| go list -m example.com/x |
| stdout '^example.com/x v0.1.0 ' |
| |
| |
| # The same should work with GOPROXY=off. |
| |
| env GOPROXY=off |
| cp go.mod.orig go.mod |
| |
| go mod edit -replace=example.com/x=./x |
| go get -d example.com/x |
| |
| go list -m example.com/x |
| stdout '^example.com/x v0.0.0-00010101000000-000000000000 ' |
| |
| # If specific-version replacements exist, the highest matching version should be used. |
| go mod edit -replace=example.com/x@v0.1.0=./x |
| go mod edit -replace=example.com/x@v0.2.0=./x |
| |
| go get -d example.com/x |
| go list -m example.com/x |
| stdout '^example.com/x v0.2.0 ' |
| |
| go get -d example.com/x@<v0.2.0 |
| go list -m example.com/x |
| stdout '^example.com/x v0.1.0 ' |
| |
| |
| # Replacements should also be listed as known versions, and 'go get' should sort |
| # them in with ordinary versions. |
| |
| env GOPROXY=$oldGOPROXY |
| |
| cp go.mod.orig go.mod |
| go list -versions -m rsc.io/quote |
| stdout 'v1.3.0 v1.4.0' |
| |
| go get -d rsc.io/quote@v1.3 |
| go list -m rsc.io/quote |
| stdout '^rsc.io/quote v1.3.0' |
| |
| go mod edit -replace rsc.io/quote@v1.3.1=rsc.io/quote@v1.4.0 |
| |
| go list -versions -m rsc.io/quote |
| stdout 'v1.3.0 v1.3.1 v1.4.0' |
| |
| go get -d rsc.io/quote@v1.3 |
| go list -m rsc.io/quote |
| stdout '^rsc.io/quote v1.3.1 ' |
| |
| go get -d rsc.io/quote@>v1.3.1 |
| go list -m rsc.io/quote |
| stdout '^rsc.io/quote v1.4.0' |
| |
| |
| # Replacements should allow 'go get' to work even with dotless module paths. |
| |
| cp go.mod.orig go.mod |
| |
| ! go list example |
| stderr '^package example is not in GOROOT \(.*\)$' |
| ! go get -d example |
| stderr '^go get: malformed module path "example": missing dot in first path element$' |
| |
| go mod edit -replace example@v0.1.0=./example |
| |
| ! go list example |
| stderr '^module example provides package example and is replaced but not required; to add it:\n\tgo get example@v0.1.0$' |
| |
| go get -d example |
| go list -m example |
| stdout '^example v0.1.0 ' |
| |
| |
| -- go.mod -- |
| module example.com |
| |
| go 1.16 |
| -- x/go.mod -- |
| module example.com/x |
| |
| go 1.16 |
| -- x/x.go -- |
| package x |
| -- example/go.mod -- |
| module example |
| go 1.16 |
| -- example/example.go -- |
| package example |