]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/terraform/plugin/discovery/version.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / plugin / discovery / version.go
1 package discovery
2
3 import (
4 "fmt"
5 "sort"
6
7 version "github.com/hashicorp/go-version"
8 )
9
10 const VersionZero = "0.0.0"
11
12 // A VersionStr is a string containing a possibly-invalid representation
13 // of a semver version number. Call Parse on it to obtain a real Version
14 // object, or discover that it is invalid.
15 type VersionStr string
16
17 // Parse transforms a VersionStr into a Version if it is
18 // syntactically valid. If it isn't then an error is returned instead.
19 func (s VersionStr) Parse() (Version, error) {
20 raw, err := version.NewVersion(string(s))
21 if err != nil {
22 return Version{}, err
23 }
24 return Version{raw}, nil
25 }
26
27 // MustParse transforms a VersionStr into a Version if it is
28 // syntactically valid. If it isn't then it panics.
29 func (s VersionStr) MustParse() Version {
30 ret, err := s.Parse()
31 if err != nil {
32 panic(err)
33 }
34 return ret
35 }
36
37 // Version represents a version number that has been parsed from
38 // a semver string and known to be valid.
39 type Version struct {
40 // We wrap this here just because it avoids a proliferation of
41 // direct go-version imports all over the place, and keeps the
42 // version-processing details within this package.
43 raw *version.Version
44 }
45
46 func (v Version) String() string {
47 return v.raw.String()
48 }
49
50 func (v Version) NewerThan(other Version) bool {
51 return v.raw.GreaterThan(other.raw)
52 }
53
54 func (v Version) Equal(other Version) bool {
55 return v.raw.Equal(other.raw)
56 }
57
58 // IsPrerelease determines if version is a prerelease
59 func (v Version) IsPrerelease() bool {
60 return v.raw.Prerelease() != ""
61 }
62
63 // MinorUpgradeConstraintStr returns a ConstraintStr that would permit
64 // minor upgrades relative to the receiving version.
65 func (v Version) MinorUpgradeConstraintStr() ConstraintStr {
66 segments := v.raw.Segments()
67 return ConstraintStr(fmt.Sprintf("~> %d.%d", segments[0], segments[1]))
68 }
69
70 type Versions []Version
71
72 // Sort sorts version from newest to oldest.
73 func (v Versions) Sort() {
74 sort.Slice(v, func(i, j int) bool {
75 return v[i].NewerThan(v[j])
76 })
77 }