github.com/bilus/oya@v0.0.3-0.20190301162104-da4acbd394c6/pkg/semver/version.go (about)

     1  package semver
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  
     7  	"github.com/blang/semver"
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  type Version semver.Version
    12  
    13  var versionRx = regexp.MustCompile("^v([\\d\\.]+)$")
    14  
    15  // Parse parses version string in vX.Y.Z format and returns a validated Version or error.
    16  func Parse(v string) (Version, error) {
    17  	if matches := versionRx.FindStringSubmatch(v); len(matches) == 2 {
    18  		ver, err := semver.Parse(matches[1])
    19  		return Version(ver), err
    20  	} else {
    21  		return Version{}, errors.Errorf("Unrecognized version syntax: %v, expected: vX.Y.Z", v)
    22  	}
    23  }
    24  
    25  // MustParse is like Parse but panics if the version cannot be parsed.
    26  func MustParse(v string) Version {
    27  	ver, err := Parse(v)
    28  	if err != nil {
    29  		panic(err)
    30  	}
    31  	return ver
    32  }
    33  
    34  // String returns display representation of the version in the vX.Y.Z format.
    35  func (ver Version) String() string {
    36  	return fmt.Sprintf("v%v", semver.Version(ver))
    37  }
    38  
    39  func (ver Version) LessThan(other Version) bool {
    40  	return semver.Version(ver).LT(semver.Version(other))
    41  }