Files
git.stella-ops.org/docs/features/unchecked/libraries/distro-specific-version-comparators.md

2.7 KiB

Distro-Specific Version Comparators

Module

__Libraries

Status

IMPLEMENTED

Description

All three major distro version comparators implemented: dpkg EVR (Debian/Ubuntu), RPMVERCMP (RHEL/Fedora/SUSE), and APK version models.

Implementation Details

  • IVersionComparator: src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs -- interface with ComparatorType property, Compare(string?, string?), and CompareWithProof(string?, string?) returning VersionComparisonResult (Comparison int, ImmutableArray ProofLines, ComparatorType); ComparatorType enum: RpmEvr, Dpkg, Apk, SemVer; result has IsLessThan, IsEqual, IsGreaterThan, IsGreaterThanOrEqual helpers
  • DebianVersionComparer: src/__Libraries/StellaOps.VersionComparison/Comparers/DebianVersionComparer.cs -- singleton implementing IVersionComparator, IComparer<DebianVersion>, IComparer<string>; handles epoch:upstream_version-debian_revision with tilde pre-release support; CompareSegment implements dpkg semantics: skip non-alphanumeric (except tilde), tilde sorts before everything, digits sort after letters, numeric segments compared by length then lexicographic; CompareWithProof generates human-readable proof lines for each comparison step (epoch, upstream version, debian revision)
  • RpmVersionComparer: src/__Libraries/StellaOps.VersionComparison/Comparers/RpmVersionComparer.cs -- singleton implementing IVersionComparator, IComparer<RpmVersion>, IComparer<string>; handles epoch, version, release with tilde support; CompareSegment uses rpmvercmp semantics: SkipToNextSegment (handle tildes), CompareNumericSegment (trim leading zeros, compare by length then lexicographic), CompareAlphaSegment (ordinal comparison); CompareWithProof with detailed proof lines
  • StringVersionComparer: src/__Libraries/StellaOps.VersionComparison/Comparers/StringVersionComparer.cs -- fallback string comparison
  • Models: src/__Libraries/StellaOps.VersionComparison/Models/ -- DebianVersion (Epoch, Version, Revision with TryParse), RpmVersion (Epoch, Version, Release with TryParse), ApkVersion
  • Source: Feature matrix scan

E2E Test Plan

  • Verify Debian version comparison handles epoch correctly (2:1.0 > 1:2.0)
  • Test dpkg tilde pre-release: 1.0~beta < 1.0
  • Verify RPM EVR comparison follows rpmvercmp semantics (numeric vs alpha segments)
  • Test RPM tilde support: 1.0~rc1 < 1.0
  • Verify APK version comparison handles APK-specific version schemes
  • Test proof line generation provides human-readable comparison steps
  • Verify all comparators handle null/empty versions gracefully
  • Test IsGreaterThanOrEqual for installed >= fixed version checks