Skip to content

Commit

Permalink
[release-branch.go1.22] go/version: fix package to accept go1.21.0-bi…
Browse files Browse the repository at this point in the history
…gcorp

The proposal discussion made clear that suffixes should be accepted,
so that people who use custom VERSION files can still pass runtime.Version()
to this code. But we forgot to do that in the CL. Do that.

Note that cmd/go also strips space- and tab-prefixed suffixes,
but go.dev/doc/toolchain only mentions dash, so this code only
strips dash.

Fixes #65061.

Change-Id: I6a427b78f964eb41c024890dae30223beaef13eb
Cq-Include-Trybots: luci.golang.try:go1.22-linux-amd64-longtest,go1.22-windows-amd64-longtest
Reviewed-on: https://go-review.googlesource.com/c/go/+/559796
TryBot-Bypass: Russ Cox <[email protected]>
Reviewed-by: Mauri de Souza Meneguzzo <[email protected]>
Reviewed-by: Bryan Mills <[email protected]>
Reviewed-on: https://go-review.googlesource.com/c/go/+/559802
LUCI-TryBot-Result: Go LUCI <[email protected]>
  • Loading branch information
rsc authored and mknyszek committed Feb 1, 2024
1 parent 9289b9c commit 7b3786b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/go/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package version provides operations on [Go versions].
// Package version provides operations on [Go versions]
// in [Go toolchain name syntax]: strings like
// "go1.20", "go1.21.0", "go1.22rc2", and "go1.23.4-bigcorp".
//
// [Go versions]: https://go.dev/doc/toolchain#version
// [Go toolchain name syntax]: https://go.dev/doc/toolchain#name
package version // import "go/version"

import (
"internal/gover"
"strings"
)

// stripGo converts from a "go1.21" version to a "1.21" version.
// stripGo converts from a "go1.21-bigcorp" version to a "1.21" version.
// If v does not start with "go", stripGo returns the empty string (a known invalid version).
func stripGo(v string) string {
v, _, _ = strings.Cut(v, "-") // strip -bigcorp suffix.
if len(v) < 2 || v[:2] != "go" {
return ""
}
Expand Down Expand Up @@ -50,8 +54,6 @@ func Lang(x string) string {
// valid versions and equal to each other.
// The language version "go1.21" compares less than the
// release candidate and eventual releases "go1.21rc1" and "go1.21.0".
// Custom toolchain suffixes are ignored during comparison:
// "go1.21.0" and "go1.21.0-bigcorp" are equal.
func Compare(x, y string) int {
return gover.Compare(stripGo(x), stripGo(y))
}
Expand Down
3 changes: 3 additions & 0 deletions src/go/version/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@ var compareTests = []testCase2[string, string, int]{
{"go1.19", "go1.19.0", 0},
{"go1.19rc1", "go1.19", -1},
{"go1.20", "go1.20.0", 0},
{"go1.20", "go1.20.0-bigcorp", 0},
{"go1.20rc1", "go1.20", -1},
{"go1.21", "go1.21.0", -1},
{"go1.21", "go1.21.0-bigcorp", -1},
{"go1.21", "go1.21rc1", -1},
{"go1.21rc1", "go1.21.0", -1},
{"go1.6", "go1.19", -1},
{"go1.19", "go1.19.1", -1},
{"go1.19rc1", "go1.19", -1},
{"go1.19rc1", "go1.19", -1},
{"go1.19rc1", "go1.19.1", -1},
{"go1.19rc1", "go1.19rc2", -1},
{"go1.19.0", "go1.19.1", -1},
Expand Down

0 comments on commit 7b3786b

Please sign in to comment.