gitlab.com/jokerrs1/Sia@v1.3.2/build/version.go (about) 1 package build 2 3 import ( 4 "strconv" 5 "strings" 6 ) 7 8 const ( 9 // MaxEncodedVersionLength is the maximum length of a version string encoded 10 // with the encode package. 100 is much larger than any version number we send 11 // now, but it allows us to send additional information in the version string 12 // later if we choose. For example appending the version string with the HEAD 13 // commit hash. 14 MaxEncodedVersionLength = 100 15 16 // Version is the current version of siad. 17 Version = "1.3.2" 18 ) 19 20 // IsVersion returns whether str is a valid version number. 21 func IsVersion(str string) bool { 22 for _, n := range strings.Split(str, ".") { 23 if _, err := strconv.Atoi(n); err != nil { 24 return false 25 } 26 } 27 return true 28 } 29 30 // min returns the smaller of two integers. 31 func min(a, b int) int { 32 if a < b { 33 return a 34 } 35 return b 36 } 37 38 // VersionCmp returns an int indicating the difference between a and b. It 39 // follows the convention of bytes.Compare and big.Cmp: 40 // 41 // -1 if a < b 42 // 0 if a == b 43 // +1 if a > b 44 // 45 // One important quirk is that "1.1.0" is considered newer than "1.1", despite 46 // being numerically equal. 47 func VersionCmp(a, b string) int { 48 aNums := strings.Split(a, ".") 49 bNums := strings.Split(b, ".") 50 for i := 0; i < min(len(aNums), len(bNums)); i++ { 51 // assume that both version strings are valid 52 aInt, _ := strconv.Atoi(aNums[i]) 53 bInt, _ := strconv.Atoi(bNums[i]) 54 if aInt < bInt { 55 return -1 56 } else if aInt > bInt { 57 return 1 58 } 59 } 60 // all shared digits are equal, but lengths may not be equal 61 if len(aNums) < len(bNums) { 62 return -1 63 } else if len(aNums) > len(bNums) { 64 return 1 65 } 66 // strings are identical 67 return 0 68 }