func CanonicalVersion(v string) string
CanonicalVersion returns the canonical form of the version string v. It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible".
func Check(path, version string) error
Check checks that a given module path, version pair is valid. In addition to the path being a valid module path and the version being a valid semantic version, the two must correspond. For example, the path "yaml/v2" only corresponds to semantic versions beginning with "v2.".
func CheckFilePath(path string) error
CheckFilePath checks that a slash-separated file path is valid. The definition of a valid file path is the same as the definition of a valid import path except that the set of allowed characters is larger: all Unicode letters, ASCII digits, the ASCII space character (U+0020), and the ASCII punctuation characters “!#$%&()+,-.=@[]^_{}~”. (The excluded punctuation characters, " * < > ? ` ' | / \ and :, have special meanings in certain shells or operating systems.)
CheckFilePath may be less restrictive in the future, but see the top-level package documentation for additional information about subtleties of Unicode.
func CheckImportPath(path string) error
CheckImportPath checks that an import path is valid.
A valid import path consists of one or more valid path elements separated by slashes (U+002F). (It must not begin with nor end in a slash.)
A valid path element is a non-empty string made up of ASCII letters, ASCII digits, and limited ASCII punctuation: + - . _ and ~. It must not begin or end with a dot (U+002E), nor contain two dots in a row.
The element prefix up to the first dot must not be a reserved file name on Windows, regardless of case (CON, com1, NuL, and so on).
CheckImportPath may be less restrictive in the future, but see the top-level package documentation for additional information about subtleties of Unicode.
func CheckPath(path string) error
CheckPath checks that a module path is valid. A valid module path is a valid import path, as checked by CheckImportPath, with two additional constraints. First, the leading path element (up to the first slash, if any), by convention a domain name, must contain only lower-case ASCII letters, ASCII digits, dots (U+002E), and dashes (U+002D); it must contain at least one dot and cannot start with a dash. Second, for a final path element of the form /vN, where N looks numeric (ASCII digits and dots) must not begin with a leading zero, must not be /v1, and must not contain any dots. For paths beginning with "gopkg.in/", this second requirement is replaced by a requirement that the path follow the gopkg.in server's conventions.
func CheckPathMajor(v, pathMajor string) error
CheckPathMajor returns a non-nil error if the semantic version v does not match the path major version pathMajor.
func EscapePath(path string) (escaped string, err error)
EscapePath returns the escaped form of the given module path. It fails if the module path is invalid.
func EscapeVersion(v string) (escaped string, err error)
EscapeVersion returns the escaped form of the given module version. Versions are allowed to be in non-semver form but must be valid file names and not contain exclamation marks.
func MatchPathMajor(v, pathMajor string) bool
MatchPathMajor reports whether the semantic version v matches the path major version pathMajor.
MatchPathMajor returns true if and only if CheckPathMajor returns nil.
func PathMajorPrefix(pathMajor string) string
PathMajorPrefix returns the major-version tag prefix implied by pathMajor. An empty PathMajorPrefix allows either v0 or v1.
Note that MatchPathMajor may accept some versions that do not actually begin with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1' pathMajor, even though that pathMajor implies 'v1' tagging.
func Sort(list []Version)
Sort sorts the list by Path, breaking ties by comparing Version fields. The Version fields are interpreted as semantic versions (using semver.Compare) optionally followed by a tie-breaking suffix introduced by a slash character, like in "v0.0.1/go.mod".
func SplitPathVersion(path string) (prefix, pathMajor string, ok bool)
SplitPathVersion returns prefix and major version such that prefix+pathMajor == path and version is either empty or "/vN" for N >= 2. As a special case, gopkg.in paths are recognized directly; they require ".vN" instead of "/vN", and for all N, not just N >= 2. SplitPathVersion returns with ok = false when presented with a path whose last path element does not satisfy the constraints applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2".
func UnescapePath(escaped string) (path string, err error)
UnescapePath returns the module path for the given escaped path. It fails if the escaped path is invalid or describes an invalid path.
func UnescapeVersion(escaped string) (v string, err error)
UnescapeVersion returns the version string for the given escaped version. It fails if the escaped form is invalid or describes an invalid version. Versions are allowed to be in non-semver form but must be valid file names and not contain exclamation marks.
func VersionError(v Version, err error) error
VersionError returns a ModuleError derived from a Version and error, or err itself if it is already such an error.
An InvalidVersionError indicates an error specific to a version, with the module path unknown or specified externally.
A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError must not wrap a ModuleError.
type InvalidVersionError struct { Version string Pseudo bool Err error }
func (e *InvalidVersionError) Error() string
func (e *InvalidVersionError) Unwrap() error
A ModuleError indicates an error specific to a module.
type ModuleError struct { Path string Version string Err error }
func (e *ModuleError) Error() string
func (e *ModuleError) Unwrap() error
A Version (for clients, a module.Version) is defined by a module path and version pair. These are stored in their plain (unescaped) form.
type Version struct { // Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2". Path string // Version is usually a semantic version in canonical form. // There are three exceptions to this general rule. // First, the top-level target of a build has no specific version // and uses Version = "". // Second, during MVS calculations the version "none" is used // to represent the decision to take no version of a given module. // Third, filesystem paths found in "replace" directives are // represented by a path with an empty version. Version string `json:",omitempty"` }
func (m Version) String() string
String returns the module version syntax Path@Version.