Files
git.stella-ops.org/docs/features/unchecked/libraries/rpm-evr-version-comparison.md

28 lines
2.4 KiB
Markdown

# 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`); implements `IVersionComparator` with `ComparatorType.RpmEvr`; `Compare(left, right)` returns `VersionComparisonResult` with `ProofLines`; `CompareWithProof(left, right)` generates readable proof; internal methods: `ParseEvr(version)` parses `epoch:version-release` format, `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 defining `ComparatorType` property, `Compare(left, right)` returning `VersionComparisonResult`, `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 with `Comparison` (int), `ProofLines` (IReadOnlyList<string>), `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