From d0177a7710ff1eaec7307fa79e9a8a3f90a27621 Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Tue, 12 Nov 2019 16:56:14 -0500 Subject: internal/stdlib: handle go1 Handle the idiosyncratic mapping of go1 to v1.0.0. The following frontend paths changed behavior: - std@go1?tab=versions and archive/tar@go1?tab=versions both work now - std@go1.0 and archive/tar@go1.0 now return 4xx Fixes b/144364761. Change-Id: I2345faeedb1e418028422feaf7d9ad0233bc08ff Reviewed-on: https://team-review.git.corp.google.com/c/golang/discovery/+/597504 CI-Result: Cloud Build Reviewed-by: Julie Qiu --- internal/stdlib/stdlib.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'internal/stdlib/stdlib.go') diff --git a/internal/stdlib/stdlib.go b/internal/stdlib/stdlib.go index adf1cf49..3de7dc89 100644 --- a/internal/stdlib/stdlib.go +++ b/internal/stdlib/stdlib.go @@ -50,10 +50,18 @@ var ( // VersionForTag returns the semantic version for the Go tag, or "" if // tag doesn't correspond to a Go release or beta tag. // Examples: +// "go1" => "v1.0.0" // "go1.2" => "v1.2.0" // "go1.13beta1" => "v1.13.0-beta.1" // "go1.9rc2" => "v1.9.0-rc.2" func VersionForTag(tag string) string { + // Special cases for go1. + if tag == "go1" { + return "v1.0.0" + } + if tag == "go1.0" { + return "" + } m := tagRegexp.FindStringSubmatch(tag) if m == nil { return "" @@ -76,6 +84,10 @@ func VersionForTag(tag string) string { func TagForVersion(version string) (_ string, err error) { defer derrors.Wrap(&err, "TagForVersion(%q)", version) + // Special case: v1.0.0 => go1. + if version == "v1.0.0" { + return "go1", nil + } if !semver.IsValid(version) { return "", derrors.FromHTTPStatus(http.StatusBadRequest, "requested version is not a valid semantic version: %q ", version) } @@ -108,12 +120,15 @@ func TagForVersion(version string) (_ string, err error) { // MajorVersionForVersion returns the Go major version for version. // E.g. "v1.13.3" => "go1". func MajorVersionForVersion(version string) (_ string, err error) { - defer derrors.Wrap(&err, "MajorTagForVersion(%q)", version) + defer derrors.Wrap(&err, "MajorVersionForVersion(%q)", version) tag, err := TagForVersion(version) if err != nil { return "", err } + if tag == "go1" { + return tag, nil + } i := strings.IndexRune(tag, '.') if i < 0 { return "", fmt.Errorf("no '.' in go tag %q", tag) -- cgit v1.3-6-g1900