2.4 KiB
2.4 KiB
RPM EVR Version Comparison
Module
__Libraries
Status
IMPLEMENTED
Description
RPM Epoch:Version-Release parsing and rpmvercmp-equivalent comparison for RHEL/Fedora/SUSE packages. Implements IVersionComparator with ComparatorType.RpmEvr, including segment-based comparison with numeric-first ordering, alpha segment comparison, tilde pre-release semantics, and CompareWithProof generating human-readable proof lines.
Implementation Details
- RpmVersionComparer:
src/__Libraries/StellaOps.VersionComparison/Comparers/RpmVersionComparer.cs-- singleton (Instance); implementsIVersionComparatorwithComparatorType.RpmEvr;Compare(left, right)returnsVersionComparisonResultwithProofLines;CompareWithProof(left, right)generates readable proof; internal methods:ParseEvr(version)parsesepoch:version-releaseformat,CompareRpmVersion(a, b)applies rpmvercmp algorithm,SkipToNextSegment(s, ref pos)advances past separators,CompareNumericSegment(a, b, ref posA, ref posB)compares digit runs (longer numeric wins, then lexicographic),CompareAlphaSegment(a, b, ref posA, ref posB)compares alpha character runs - IVersionComparator:
src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs-- interface definingComparatorTypeproperty,Compare(left, right)returningVersionComparisonResult,CompareWithProof(left, right)returning proof lines - ComparatorType:
src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs-- enum:RpmEvr,Dpkg,Apk,SemVer - VersionComparisonResult:
src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs-- record withComparison(int),ProofLines(IReadOnlyList),Comparator(ComparatorType) - Source: Feature matrix scan
E2E Test Plan
- Verify RpmVersionComparer correctly parses epoch:version-release format
- Test rpmvercmp numeric segment comparison (longer digit run wins)
- Verify alpha segment comparison follows RPM ordering rules
- Test tilde pre-release semantics (tilde sorts before everything including empty)
- Verify epoch comparison takes priority over version and release
- Test CompareWithProof generates human-readable proof lines for each comparison step
- Verify singleton pattern (RpmVersionComparer.Instance returns same reference)
- Test edge cases: missing epoch (defaults to 0), missing release, empty segments