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

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); 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), 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