github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/api/types/versions/compare.go (about)

     1  package versions // import "github.com/demonoid81/moby/api/types/versions"
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  )
     7  
     8  // compare compares two version strings
     9  // returns -1 if v1 < v2, 1 if v1 > v2, 0 otherwise.
    10  func compare(v1, v2 string) int {
    11  	var (
    12  		currTab  = strings.Split(v1, ".")
    13  		otherTab = strings.Split(v2, ".")
    14  	)
    15  
    16  	max := len(currTab)
    17  	if len(otherTab) > max {
    18  		max = len(otherTab)
    19  	}
    20  	for i := 0; i < max; i++ {
    21  		var currInt, otherInt int
    22  
    23  		if len(currTab) > i {
    24  			currInt, _ = strconv.Atoi(currTab[i])
    25  		}
    26  		if len(otherTab) > i {
    27  			otherInt, _ = strconv.Atoi(otherTab[i])
    28  		}
    29  		if currInt > otherInt {
    30  			return 1
    31  		}
    32  		if otherInt > currInt {
    33  			return -1
    34  		}
    35  	}
    36  	return 0
    37  }
    38  
    39  // LessThan checks if a version is less than another
    40  func LessThan(v, other string) bool {
    41  	return compare(v, other) == -1
    42  }
    43  
    44  // LessThanOrEqualTo checks if a version is less than or equal to another
    45  func LessThanOrEqualTo(v, other string) bool {
    46  	return compare(v, other) <= 0
    47  }
    48  
    49  // GreaterThan checks if a version is greater than another
    50  func GreaterThan(v, other string) bool {
    51  	return compare(v, other) == 1
    52  }
    53  
    54  // GreaterThanOrEqualTo checks if a version is greater than or equal to another
    55  func GreaterThanOrEqualTo(v, other string) bool {
    56  	return compare(v, other) >= 0
    57  }
    58  
    59  // Equal checks if a version is equal to another
    60  func Equal(v, other string) bool {
    61  	return compare(v, other) == 0
    62  }