| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package internal |
| |
| import ( |
| "time" |
| |
| "golang.org/x/discovery/internal/license" |
| "golang.org/x/discovery/internal/source" |
| "golang.org/x/discovery/internal/thirdparty/module" |
| "golang.org/x/discovery/internal/version" |
| ) |
| |
| const ( |
| // LatestVersion signifies the latest available version in requests to the |
| // proxy client. |
| LatestVersion = "latest" |
| |
| // UnknownModulePath signifies that the module path for a given package |
| // path is ambiguous or not known. This is because requests to the |
| // frontend can come in the form of <import-path>[@<version>], and it is |
| // not clear which part of the import-path is the module path. |
| UnknownModulePath = "unknownModulePath" |
| ) |
| |
| // VersionInfo holds metadata associated with a version. |
| type VersionInfo struct { |
| ModulePath string |
| Version string |
| CommitTime time.Time |
| ReadmeFilePath string |
| ReadmeContents string |
| VersionType version.Type |
| SourceInfo *source.Info |
| } |
| |
| // SeriesPath returns the series path for the module. |
| // |
| // A series is a group of modules that share the same base path and are assumed |
| // to be major-version variants. |
| // |
| // The series path is the module path without the version. For most modules, |
| // this will be the module path for all module versions with major version 0 or |
| // 1. For gopkg.in modules, the series path does not correspond to any module |
| // version. |
| // |
| // Examples: |
| // The module paths "a/b" and "a/b/v2" both have series path "a/b". |
| // The module paths "gopkg.in/yaml.v1" and "gopkg.in/yaml.v2" both have series path "gopkg.in/yaml". |
| func (v *VersionInfo) SeriesPath() string { |
| return SeriesPathForModule(v.ModulePath) |
| } |
| |
| // SeriesPathForModule returns the series path for the provided modulePath. |
| func SeriesPathForModule(modulePath string) string { |
| seriesPath, _, _ := module.SplitPathVersion(modulePath) |
| return seriesPath |
| } |
| |
| // A Version is a specific, reproducible build of a module. |
| type Version struct { |
| VersionInfo |
| Packages []*Package |
| // Licenses holds all licenses within this module version, including those |
| // that may be contained in nested subdirectories. |
| Licenses []*license.License |
| } |
| |
| // A Package is a group of one or more Go source files with the same package |
| // header. Packages are part of a module. |
| type Package struct { |
| Path string |
| Name string |
| Synopsis string |
| Licenses []*license.Metadata // path to applicable version licenses |
| Imports []string |
| DocumentationHTML string |
| // The values of the GOOS and GOARCH environment variables used to parse the package. |
| GOOS string |
| GOARCH string |
| |
| // V1Path is the package path of a package with major version 1 in a given series. |
| V1Path string |
| } |
| |
| // IsRedistributable reports whether the package may be redistributed. |
| func (p *Package) IsRedistributable() bool { |
| return license.AreRedistributable(p.Licenses) |
| } |
| |
| // VersionedPackage is a Package along with its corresponding version |
| // information. |
| type VersionedPackage struct { |
| Package |
| VersionInfo |
| } |
| |
| // Directory represents a folder in a module version, and all of the packages |
| // inside that folder. |
| type Directory struct { |
| VersionInfo |
| Path string |
| Packages []*Package |
| } |
| |
| // IndexVersion holds the version information returned by the module index. |
| type IndexVersion struct { |
| Path string |
| Version string |
| Timestamp time.Time |
| } |
| |
| // VersionState holds the ETL version state. |
| type VersionState struct { |
| ModulePath string |
| Version string |
| |
| // IndexTimestamp is the timestamp received from the Index for this version, |
| // which should correspond to the time this version was committed to the |
| // Index. |
| IndexTimestamp time.Time |
| // CreatedAt is the time this version was originally inserted into the |
| // version state table. |
| CreatedAt time.Time |
| |
| // Status is the most recent HTTP status code received from the Fetch service |
| // for this version, or nil if no request to the fetch service has been made. |
| Status *int |
| // Error is the most recent HTTP response body received from the Fetch |
| // service, for a response with an unsuccessful status code. It is used for |
| // debugging only, and has no semantic significance. |
| Error *string |
| // TryCount is the number of times a fetch of this version has been |
| // attempted. |
| TryCount int |
| // LastProcessedAt is the last time this version was updated with a result |
| // from the fetch service. |
| LastProcessedAt *time.Time |
| // NextProcessedAfter is the next time a fetch for this version should be |
| // attempted. |
| NextProcessedAfter time.Time |
| |
| // AppVersion is the value of the GAE_VERSION environment variable, which is |
| // set by app engine. It is a timestamp in the format 20190709t112655 that |
| // is close to, but not the same as, the deployment time. For example, the |
| // deployment time for the above timestamp might be Jul 9, 2019, 11:29:59 AM. |
| AppVersion string |
| } |
| |
| // SearchResult represents a single search result from SearchDocuments. |
| type SearchResult struct { |
| Name string |
| PackagePath string |
| ModulePath string |
| Version string |
| Synopsis string |
| Licenses []string |
| |
| CommitTime time.Time |
| // Score is used to sort items in an array of SearchResult. |
| Score float64 |
| |
| // NumImportedBy is the number of packages that import Package. |
| NumImportedBy uint64 |
| |
| // NumResults is the total number of packages that were returned for this search. |
| NumResults uint64 |
| // Approximate reports whether NumResults is an approximate count. NumResults |
| // can be approximate if search scanned only a subset of documents, and |
| // result count is estimated using the hyperloglog algorithm. |
| Approximate bool |
| } |