Part of #11
As a developer, I want version constraints to be resolved correctly so that compatible package versions are installed.
2.0.0
^2.0.0
~2.0.0
>=2.0.0 <3.0.0
public record SemVer(int major, int minor, int patch, String prerelease) implements Comparable<SemVer> { public static SemVer parse(String version); public boolean satisfies(VersionConstraint constraint); } public record VersionConstraint(ConstraintType type, SemVer base) { public boolean matches(SemVer version); public SemVer findBestMatch(List<SemVer> available); }
qctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/SemVer.java
qctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/VersionConstraint.java
qctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/ConstraintType.java
VersionConstraint
2.0.0-beta.1
SemVer
Comparable<SemVer>
ConstraintType
matches(SemVer)
findBestMatch(List<SemVer>)
No dependencies set.
The note is not visible to the blocked user.
Part of #11
User Story
As a developer, I want version constraints to be resolved correctly so that compatible package versions are installed.
Design
Supported Constraint Syntax
2.0.0^2.0.0~2.0.0>=2.0.0 <3.0.0SemVer Model
Files to Create
qctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/SemVer.javaqctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/VersionConstraint.javaqctl-qbit/src/main/java/io/qrun/qctl/qbit/semver/ConstraintType.javaResolution Algorithm
VersionConstraintEdge Cases
2.0.0-beta.1)Implementation Tasks
SemVerrecord with parsing logicComparable<SemVer>for sortingConstraintTypeenum (EXACT, CARET, TILDE, RANGE, LATEST)VersionConstraintwith parsing logicmatches(SemVer)for each constraint typefindBestMatch(List<SemVer>)Acceptance Criteria
^2.0.0matches 2.0.0, 2.1.0, 2.9.9 but not 3.0.0~2.0.0matches 2.0.0, 2.0.5 but not 2.1.02.0.0matches only 2.0.0