diff options
| author | Julie Qiu <julie@golang.org> | 2020-08-07 11:06:51 -0400 |
|---|---|---|
| committer | Julie Qiu <julie@golang.org> | 2020-08-07 23:02:42 +0000 |
| commit | 6ff89452f42b0954baf18a5fa0e05efe7e11cac6 (patch) | |
| tree | e1825132e1c540697bc682ac4dc277795d3f6bae /internal/stdlib/stdlib.go | |
| parent | 350fd05e0bd55eafff577ac490f9a3ef2ed29310 (diff) | |
| download | go-x-pkgsite-6ff89452f42b0954baf18a5fa0e05efe7e11cac6.tar.xz | |
internal/stdlib: add semanticVersion function
Logic for resolving the semantic version in Zip is moved to the
function semanticVersion.
For golang/go#39973
Change-Id: I5c9215a4cc326d2a9c5db79f33509656ec0b0065
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/247398
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Diffstat (limited to 'internal/stdlib/stdlib.go')
| -rw-r--r-- | internal/stdlib/stdlib.go | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/internal/stdlib/stdlib.go b/internal/stdlib/stdlib.go index c33c4240..2bfe6c48 100644 --- a/internal/stdlib/stdlib.go +++ b/internal/stdlib/stdlib.go @@ -273,42 +273,11 @@ func Zip(requestedVersion string) (_ *zip.Reader, commitTime time.Time, _ string // https://github.com/shurcooL/play/blob/master/256/moduleproxy/std/std.go. defer derrors.Wrap(&err, "stdlib.Zip(%q)", requestedVersion) - knownVersions, err := Versions() + resolvedVersion, err := semanticVersion(requestedVersion) if err != nil { return nil, time.Time{}, "", err } - var resolvedVersion string - switch requestedVersion { - case "latest": - var latestVersion string - for _, v := range knownVersions { - versionType, err := version.ParseType(v) - if err != nil { - return nil, time.Time{}, "", err - } - if versionType != version.TypeRelease { - // We expect there to always be at least 1 release version. - continue - } - if semver.Compare(v, latestVersion) > 0 { - latestVersion = v - } - } - resolvedVersion = latestVersion - default: - for _, v := range knownVersions { - if v == requestedVersion { - resolvedVersion = requestedVersion - break - } - } - } - - if resolvedVersion == "" { - return nil, time.Time{}, "", fmt.Errorf("%w: requested version unknown: %q", derrors.InvalidArgument, requestedVersion) - } - var repo *git.Repository if UseTestData { repo, err = getTestGoRepo(resolvedVersion) @@ -359,6 +328,41 @@ func Zip(requestedVersion string) (_ *zip.Reader, commitTime time.Time, _ string return zr, commit.Committer.When, resolvedVersion, nil } +// semanticVersion returns the semantic version corresponding to the +// requestedVersion. +func semanticVersion(requestedVersion string) (_ string, err error) { + defer derrors.Wrap(&err, "semanticVersion(%q)", requestedVersion) + + knownVersions, err := Versions() + if err != nil { + return "", err + } + if requestedVersion == "latest" { + var latestVersion string + for _, v := range knownVersions { + versionType, err := version.ParseType(v) + if err != nil { + return "", err + } + if versionType != version.TypeRelease { + // We expect there to always be at least 1 release version. + continue + } + if semver.Compare(v, latestVersion) > 0 { + latestVersion = v + } + } + return latestVersion, nil + } + + for _, v := range knownVersions { + if v == requestedVersion { + return requestedVersion, nil + } + } + return "", fmt.Errorf("%w: requested version unknown: %q", derrors.InvalidArgument, requestedVersion) +} + // addFiles adds the files in t to z, using dirpath as the path prefix. // If recursive is true, it also adds the files in all subdirectories. func addFiles(z *zip.Writer, r *git.Repository, t *object.Tree, dirpath string, recursive bool) (err error) { |
