28 lines
2.4 KiB
Markdown
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
|