Search in sources :

Example 1 with VersionRange

use of org.eclipse.n4js.semver.Semver.VersionRange in project n4js by eclipse.

the class SemverMatcher method isWildcard.

/**
 * The matching of wildcards is specified different on <a href="https://docs.npmjs.com/misc/semver">npmjs.com<a>
 * than it is behaving using npm with regard to the handling of pre-release tagged versions. Namely, npmjs.com says
 * {@code "" (empty string) := * := >=0.0.0} which is not true for npm. Therefore, this matching method will mimic
 * the npm behavior e.g. when executing 'npm install package@*' and match any version for {@code @*} including
 * pre-release tagged ones.
 *
 * @return true iff the given constraint consists of one wildcard only
 */
private static boolean isWildcard(VersionRangeSetRequirement constraint) {
    if (constraint.getRanges().size() != 1) {
        return false;
    }
    VersionRange versionRange = constraint.getRanges().get(0);
    if (!(versionRange instanceof VersionRangeConstraint)) {
        return false;
    }
    VersionRangeConstraint vrc = (VersionRangeConstraint) versionRange;
    if (vrc.getVersionConstraints().size() != 1) {
        return false;
    }
    SimpleVersion simpleVersion = vrc.getVersionConstraints().get(0);
    return simpleVersion.isWildcard();
}
Also used : VersionRangeConstraint(org.eclipse.n4js.semver.Semver.VersionRangeConstraint) VersionRange(org.eclipse.n4js.semver.Semver.VersionRange) SimpleVersion(org.eclipse.n4js.semver.Semver.SimpleVersion)

Example 2 with VersionRange

use of org.eclipse.n4js.semver.Semver.VersionRange in project n4js by eclipse.

the class SemverMatcher method matches.

/**
 * This method checks {@link VersionRangeSetRequirement}s whether they match or not. Its semantics is aligned to
 * <a href="https://semver.npmjs.com/">semver.npmjs.com<a>.
 *
 * @param proband
 *            version that is checked to match the constraint
 * @param constraint
 *            version that must be met by the proband
 * @return true iff the given {@code proband} version matches the given {@code constraint} version
 */
private static boolean matches(VersionNumber proband, VersionRangeSetRequirement constraint) {
    EList<VersionRange> cRanges = constraint.getRanges();
    if (cRanges.isEmpty()) {
        // Empty versions are interpreted as "latest". Thus return true here.
        return true;
    }
    if (isWildcard(constraint)) {
        return true;
    }
    for (VersionRange cRange : cRanges) {
        List<SimpleVersion> simpleConstraints = SemverConverter.simplify(cRange);
        boolean rangeMatches = matches(proband, simpleConstraints);
        if (rangeMatches) {
            return true;
        }
    }
    return false;
}
Also used : VersionRange(org.eclipse.n4js.semver.Semver.VersionRange) SimpleVersion(org.eclipse.n4js.semver.Semver.SimpleVersion)

Example 3 with VersionRange

use of org.eclipse.n4js.semver.Semver.VersionRange in project n4js by eclipse.

the class SemverUtils method isWildcardVersionRequirement.

/**
 * Tells if the given version requirement is a wildcard version requirement, as obtained by parsing the string "*".
 */
public static boolean isWildcardVersionRequirement(NPMVersionRequirement versionRequirement) {
    if (versionRequirement instanceof VersionRangeSetRequirement) {
        List<VersionRange> ranges = ((VersionRangeSetRequirement) versionRequirement).getRanges();
        VersionRange range = ranges.size() == 1 ? ranges.get(0) : null;
        List<SimpleVersion> constraints = range instanceof VersionRangeConstraint ? ((VersionRangeConstraint) range).getVersionConstraints() : Collections.emptyList();
        SimpleVersion simple = constraints.size() == 1 ? constraints.get(0) : null;
        if (simple != null) {
            return simple.isWildcard();
        }
    }
    return false;
}
Also used : VersionRangeConstraint(org.eclipse.n4js.semver.Semver.VersionRangeConstraint) VersionRangeSetRequirement(org.eclipse.n4js.semver.Semver.VersionRangeSetRequirement) VersionRange(org.eclipse.n4js.semver.Semver.VersionRange) SimpleVersion(org.eclipse.n4js.semver.Semver.SimpleVersion)

Example 4 with VersionRange

use of org.eclipse.n4js.semver.Semver.VersionRange in project n4js by eclipse.

the class SemverHelper method parseVersionNumber.

/**
 * @return {@link VersionNumber} of the given {@link IParseResult}
 */
public VersionNumber parseVersionNumber(IParseResult semverParseResult) {
    VersionRangeSetRequirement vrs = parseVersionRangeSet(semverParseResult);
    if (vrs == null || vrs.getRanges().isEmpty()) {
        return null;
    }
    VersionRange firstVersionRange = vrs.getRanges().get(0);
    if (!(firstVersionRange instanceof VersionRangeConstraint)) {
        return null;
    }
    VersionRangeConstraint vrc = (VersionRangeConstraint) firstVersionRange;
    if (vrc.getVersionConstraints().isEmpty()) {
        return null;
    }
    SimpleVersion firstSimpleVersion = vrc.getVersionConstraints().get(0);
    return firstSimpleVersion.getNumber();
}
Also used : VersionRangeConstraint(org.eclipse.n4js.semver.Semver.VersionRangeConstraint) VersionRangeSetRequirement(org.eclipse.n4js.semver.Semver.VersionRangeSetRequirement) VersionRange(org.eclipse.n4js.semver.Semver.VersionRange) SimpleVersion(org.eclipse.n4js.semver.Semver.SimpleVersion)

Aggregations

SimpleVersion (org.eclipse.n4js.semver.Semver.SimpleVersion)4 VersionRange (org.eclipse.n4js.semver.Semver.VersionRange)4 VersionRangeConstraint (org.eclipse.n4js.semver.Semver.VersionRangeConstraint)3 VersionRangeSetRequirement (org.eclipse.n4js.semver.Semver.VersionRangeSetRequirement)2