Documentation ¶
Overview ¶
Package modver compares two versions of the same Go module. It can tell whether the differences require at least a patchlevel version change, or a minor version change, or a major version change, according to semver rules (https://semver.org/).
Index ¶
- func GetGit(ctx context.Context) string
- func Pretty(out io.Writer, res Result)
- func WithGit(ctx context.Context, gitPath string) context.Context
- type Result
- func Compare(olders, newers []*packages.Package) Result
- func CompareDirs(older, newer string) (Result, error)
- func CompareGit(ctx context.Context, repoURL, olderRev, newerRev string) (Result, error)
- func CompareGit2(ctx context.Context, olderRepoURL, olderRev, newerRepoURL, newerRev string) (Result, error)
- func CompareGit2With(ctx context.Context, olderRepoURL, olderRev, newerRepoURL, newerRev string, ...) (Result, error)
- func CompareGitWith(ctx context.Context, repoURL, olderRev, newerRev string, ...) (Result, error)
- type ResultCode
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetGit ¶ added in v2.1.0
GetGit returns the value of the gitPath string added to `ctx` with WithGit. If the key is not set the default value is an empty string.
Types ¶
type Result ¶
type Result interface { Code() ResultCode String() string // contains filtered or unexported methods }
Result is the result of Compare.
func Compare ¶
Compare compares an "older" version of a Go module to a "newer" version of the same module. It tells whether the changes from "older" to "newer" require an increase in the major, minor, or patchlevel version numbers, according to semver rules (https://semver.org/).
Briefly, a major-version bump is needed for incompatible changes in the public API, such as when a type is removed or renamed, or parameters or results are added to or removed from a function. Old callers cannot expect to use the new version without being updated.
A minor-version bump is needed when new features are added to the public API, like a new entrypoint or new fields in an existing struct. Old callers _can_ continue using the new version without being updated, but callers depending on the new features cannot use the old version.
A patchlevel bump is needed for most other changes.
The result of Compare is the _minimal_ change required. The actual change required may be greater. For example, if a new method is added to a type, this function will return Minor. However, if something also changed about an existing method that breaks the old contract - it accepts a narrower range of inputs, for example, or returns errors in some new cases - that may well require a major-version bump, and this function can't detect those cases.
You can be assured, however, that if this function returns Major, a minor-version bump won't suffice, and if this function returns Minor, a patchlevel bump won't suffice, etc.
The packages passed to this function should have no load errors (that is, len(p.Errors) should be 0 for each package p in `olders` and `newers`). If you are using packages.Load (see https://pkg.go.dev/golang.org/x/tools/go/packages#Load), you will need at least
packages.NeedName | packages.NeedTypes | packages.NeedSyntax | packages.NeedTypesInfo
in your Config.Mode. See CompareDirs for an example of how to call Compare with the result of packages.Load.
func CompareDirs ¶
CompareDirs loads Go modules from the directories at older and newer and calls Compare on the results.
func CompareGit ¶
CompareGit compares the Go packages in two revisions of a Git repository at the given URL.
func CompareGit2 ¶ added in v2.8.0
func CompareGit2(ctx context.Context, olderRepoURL, olderRev, newerRepoURL, newerRev string) (Result, error)
CompareGit2 compares the Go packages in one revision each of two Git repositories.
func CompareGit2With ¶ added in v2.8.0
func CompareGit2With(ctx context.Context, olderRepoURL, olderRev, newerRepoURL, newerRev string, f func(older, newer string) (Result, error)) (Result, error)
CompareGit2With compares the Go packages in one revision each of two Git repositories. It uses the given callback function to perform the comparison.
The callback function receives the paths to two directories, each containing a clone of one of the repositories at its selected revision.
Note that CompareGit2(...) is simply CompareGit2With(..., CompareDirs).
func CompareGitWith ¶
func CompareGitWith(ctx context.Context, repoURL, olderRev, newerRev string, f func(older, newer string) (Result, error)) (Result, error)
CompareGitWith compares the Go packages in two revisions of a Git repository at the given URL. It uses the given callback function to perform the comparison.
The callback function receives the paths to two directories, containing two clones of the repo: one checked out at the older revision and one checked out at the newer revision.
Note that CompareGit(...) is simply CompareGitWith(..., CompareDirs).
type ResultCode ¶
type ResultCode int
ResultCode is the required version-bump level as detected by Compare.
const ( None ResultCode = iota Patchlevel Minor Major )
Values for ResultCode.
func (ResultCode) MarshalText ¶ added in v2.9.0
func (r ResultCode) MarshalText() ([]byte, error)
func (*ResultCode) UnmarshalText ¶ added in v2.9.0
func (r *ResultCode) UnmarshalText(text []byte) error
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
modver
Command modver compares two versions of the same Go packages and tells whether a Major, Minor, or Patchlevel version bump (or None) is needed to go from one to the other.
|
Command modver compares two versions of the same Go packages and tells whether a Major, Minor, or Patchlevel version bump (or None) is needed to go from one to the other. |