go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/core/resources/versions/generic/compare.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package generic 5 6 import ( 7 "errors" 8 "strings" 9 10 "go.mondoo.com/cnquery/providers/core/resources/versions/apk" 11 "go.mondoo.com/cnquery/providers/core/resources/versions/deb" 12 "go.mondoo.com/cnquery/providers/core/resources/versions/rpm" 13 "go.mondoo.com/cnquery/providers/core/resources/versions/semver" 14 ) 15 16 func Compare(format, a, b string) (int, error) { 17 var cmp int 18 var err error 19 switch format { 20 case "rpm": 21 var parser rpm.Parser 22 cmp, err = parser.Compare(a, b) 23 case "pacman": 24 var parser deb.Parser 25 cmp, err = parser.Compare(a, b) 26 case "deb": 27 var parser deb.Parser 28 cmp, err = parser.Compare(a, b) 29 case "apk": 30 var parser apk.Parser 31 // for apk versions, we need to remove the epoch, since it is the build version for alpine 32 cmp, err = parser.Compare(VersionWithoutEpoch(a), VersionWithoutEpoch(b)) 33 case "npm": 34 var parser semver.Parser 35 cmp, err = parser.Compare(a, b) 36 default: 37 err = errors.New("unsupported pkg comparison for " + format) 38 } 39 return cmp, err 40 } 41 42 func VersionWithoutEpoch(version string) string { 43 splitted := strings.SplitN(version, ":", 2) 44 if len(splitted) == 1 { 45 return splitted[0] 46 } else { 47 return splitted[1] 48 } 49 }