func compareVersions()

in pkg/server/meta/youtrack.go [684:726]


func compareVersions(a, b string) int {
	parse := func(s string) (int, int, bool) {
		var major, minor int
		hasSuffix := false
		parts := strings.SplitN(s, " ", 2)
		numeric := parts[0]
		if len(parts) > 1 && parts[1] != "" {
			hasSuffix = true
		}
		nums := strings.SplitN(numeric, ".", 2)
		if len(nums) > 0 {
			major, _ = strconv.Atoi(nums[0])
		}
		if len(nums) > 1 {
			minor, _ = strconv.Atoi(nums[1])
		}
		return major, minor, hasSuffix
	}

	aMajor, aMinor, aHasSuffix := parse(a)
	bMajor, bMinor, bHasSuffix := parse(b)

	if aMajor != bMajor {
		if aMajor > bMajor {
			return 1
		}
		return -1
	}
	if aMinor != bMinor {
		if aMinor > bMinor {
			return 1
		}
		return -1
	}

	if aHasSuffix != bHasSuffix {
		if !aHasSuffix {
			return 1
		}
		return -1
	}
	return 0
}