env TESTGO_VERSION=go1.21 env TESTGO_VERSION_SWITCH=switch # GOTOOLCHAIN=auto should run the newer toolchain env GOTOOLCHAIN=auto cp go.mod.new go.mod go get rsc.io/needgo121 rsc.io/needgo122 rsc.io/needgo123 rsc.io/needall stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$' ! stderr '\(running' stderr '^go: added rsc.io/needall v0.0.1' grep 'go 1.23' go.mod grep 'toolchain go1.23.9' go.mod # GOTOOLCHAIN=min+auto should run the newer toolchain env GOTOOLCHAIN=go1.21+auto cp go.mod.new go.mod go get rsc.io/needgo121 rsc.io/needgo122 rsc.io/needgo123 rsc.io/needall stderr '^go: rsc.io/needall@v0.0.1 requires go >= 1.23; switching to go1.23.9$' ! stderr '\(running' stderr '^go: added rsc.io/needall v0.0.1' grep 'go 1.23' go.mod grep 'toolchain go1.23.9' go.mod # GOTOOLCHAIN=go1.21 should NOT run the newer toolchain env GOTOOLCHAIN=go1.21 cp go.mod.new go.mod ! go get rsc.io/needgo121 rsc.io/needgo122 rsc.io/needgo123 rsc.io/needall ! stderr switching stderr 'rsc.io/needgo122@v0.0.1 requires go >= 1.22' stderr 'rsc.io/needgo123@v0.0.1 requires go >= 1.23' stderr 'rsc.io/needall@v0.0.1 requires go >= 1.23' stderr 'requires go >= 1.23' ! stderr 'requires go >= 1.21' # that's us! cmp go.mod go.mod.new # GOTOOLCHAIN=local should NOT run the newer toolchain env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get rsc.io/needgo121 rsc.io/needgo122 rsc.io/needgo123 rsc.io/needall ! stderr switching stderr 'rsc.io/needgo122@v0.0.1 requires go >= 1.22' stderr 'rsc.io/needgo123@v0.0.1 requires go >= 1.23' stderr 'rsc.io/needall@v0.0.1 requires go >= 1.23' stderr 'requires go >= 1.23' ! stderr 'requires go >= 1.21' # that's us! cmp go.mod go.mod.new # go get go@1.22 should resolve to the latest 1.22 env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get go@1.22 stderr '^go: updating go.mod requires go >= 1.22.9 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get go@1.22 stderr '^go: updating go.mod requires go >= 1.22.9; switching to go1.22.9$' # go get go@1.22rc1 should use 1.22rc1 exactly, not a later release. env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get go@1.22rc1 stderr '^go: updating go.mod requires go >= 1.22rc1 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get go@1.22rc1 stderr '^go: updating go.mod requires go >= 1.22rc1; switching to go1.22.9$' stderr '^go: upgraded go 1.1 => 1.22rc1$' stderr '^go: added toolchain go1.22.9$' # go get go@1.22.1 should use 1.22.1 exactly, not a later release. env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get go@1.22.1 stderr '^go: updating go.mod requires go >= 1.22.1 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get go@1.22.1 stderr '^go: updating go.mod requires go >= 1.22.1; switching to go1.22.9$' stderr '^go: upgraded go 1.1 => 1.22.1$' stderr '^go: added toolchain go1.22.9$' # go get needgo122 (says 'go 1.22') should use 1.22.0, the earliest release we have available # (ignoring prereleases). env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get rsc.io/needgo122 stderr '^go: rsc.io/needgo122@v0.0.1 requires go >= 1.22 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get rsc.io/needgo122 stderr '^go: upgraded go 1.1 => 1.22$' stderr '^go: rsc.io/needgo122@v0.0.1 requires go >= 1.22; switching to go1.22.9$' stderr '^go: added toolchain go1.22.9$' # go get needgo1223 (says 'go 1.22.3') should use go 1.22.3 env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get rsc.io/needgo1223 stderr '^go: rsc.io/needgo1223@v0.0.1 requires go >= 1.22.3 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get rsc.io/needgo1223 stderr '^go: upgraded go 1.1 => 1.22.3$' stderr '^go: rsc.io/needgo1223@v0.0.1 requires go >= 1.22.3; switching to go1.22.9$' stderr '^go: added toolchain go1.22.9$' # go get needgo124 (says 'go 1.24') should use go 1.24rc1, the only version available env GOTOOLCHAIN=local cp go.mod.new go.mod ! go get rsc.io/needgo124 stderr '^go: rsc.io/needgo124@v0.0.1 requires go >= 1.24 \(running go 1.21; GOTOOLCHAIN=local\)' env GOTOOLCHAIN=auto cp go.mod.new go.mod go get rsc.io/needgo124 stderr '^go: rsc.io/needgo124@v0.0.1 requires go >= 1.24; switching to go1.24rc1$' stderr '^go: upgraded go 1.1 => 1.24$' stderr '^go: added toolchain go1.24rc1$' # The -C flag should not happen more than once due to switching. mkdir dir dir/dir cp go.mod.new go.mod cp go.mod.new dir/go.mod cp go.mod.new dir/dir/go.mod cp p.go dir/p.go cp p.go dir/dir/p.go go get -C dir rsc.io/needgo124 stderr '^go: rsc.io/needgo124@v0.0.1 requires go >= 1.24; switching to go1.24rc1$' stderr '^go: upgraded go 1.1 => 1.24$' stderr '^go: added toolchain go1.24rc1$' cmp go.mod.new go.mod cmp go.mod.new dir/dir/go.mod grep 'go 1.24$' dir/go.mod -- go.mod.new -- module m go 1.1 -- p.go -- package p