func()

in agent/dockerclient/dockerapi_compare_versions.go [38:88]


func (lhs DockerAPIVersion) Matches(selector string) (bool, error) {
	lhsVersion, err := parseDockerVersions(string(lhs))
	if err != nil {
		return false, err
	}

	if strings.Contains(selector, ",") {
		orElements := strings.Split(selector, ",")
		for _, el := range orElements {
			if elMatches, err := lhs.Matches(el); err != nil {
				return false, err
			} else if elMatches {
				return true, nil
			}
		}
		// No elements matched
		return false, nil
	}

	if strings.HasPrefix(selector, ">=") {
		rhsVersion, err := parseDockerVersions(selector[2:])
		if err != nil {
			return false, err
		}
		return compareDockerVersions(lhsVersion, rhsVersion) >= 0, nil
	} else if strings.HasPrefix(selector, ">") {
		rhsVersion, err := parseDockerVersions(selector[1:])
		if err != nil {
			return false, err
		}
		return compareDockerVersions(lhsVersion, rhsVersion) > 0, nil
	} else if strings.HasPrefix(selector, "<=") {
		rhsVersion, err := parseDockerVersions(selector[2:])
		if err != nil {
			return false, err
		}
		return compareDockerVersions(lhsVersion, rhsVersion) <= 0, nil
	} else if strings.HasPrefix(selector, "<") {
		rhsVersion, err := parseDockerVersions(selector[1:])
		if err != nil {
			return false, err
		}
		return compareDockerVersions(lhsVersion, rhsVersion) < 0, nil
	}

	rhsVersion, err := parseDockerVersions(selector)
	if err != nil {
		return false, err
	}
	return compareDockerVersions(lhsVersion, rhsVersion) == 0, nil
}