github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/utils/version_check.go (about)

     1  package utils
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  )
     7  
     8  type Version struct {
     9  	Revisions []int
    10  }
    11  
    12  func NewVersion(version string) Version {
    13  	split := strings.Split(version, ".")
    14  
    15  	retVersion := Version{[]int{}}
    16  	for _, v := range split {
    17  		parsed, _ := strconv.Atoi(v)
    18  		retVersion.Revisions = append(retVersion.Revisions, parsed)
    19  	}
    20  	return retVersion
    21  }
    22  
    23  func (ver Version) GreaterThanOrEqual(target Version) bool {
    24  	if len(ver.Revisions) > 0 && len(target.Revisions) == 0 {
    25  		return true
    26  	} else if len(target.Revisions) > 0 && len(ver.Revisions) == 0 {
    27  		for _, v := range target.Revisions {
    28  			if v != 0 {
    29  				return false
    30  			}
    31  		}
    32  		return true
    33  	}
    34  
    35  	if ver.Revisions[0] < target.Revisions[0] {
    36  		return false
    37  	} else if (len(ver.Revisions) > 1 || len(target.Revisions) > 1) && ver.Revisions[0] == target.Revisions[0] {
    38  		return Version{ver.Revisions[1:]}.GreaterThanOrEqual(Version{target.Revisions[1:]})
    39  	}
    40  
    41  	return true
    42  }