Description
A library for dealing with RPM versions (NEVRA, EVR) correctly. Sort algorithm is identical to RPM.
Usage
In Rust
use Ordering;
use ;
// Compare EVR strings directly
assert_eq!;
assert_eq!;
// Or use the Evr struct for structured comparisons
let v1 = parse;
let v2 = parse;
assert!;
// Tilde (~) denotes a pre-release: sorts before the version without it
assert!;
// Caret (^) denotes a post-release snapshot: sorts after the base version
assert!;
assert!;
// Full NEVRA (Name-Epoch-Version-Release-Architecture) parsing
let nevra = parse;
println!; // foo 2.3.4 x86_64
// Sorting NEVRAs
let mut packages = vec!;
packages.sort;
assert_eq!;
assert_eq!;
// Evr and Nevra are hashable
use HashSet;
let mut seen = new;
seen.insert;
// Version requirement matching
use ;
let req = with_constraint;
assert!;
assert!;
assert!;
// Sort keys: encode RPM version ordering into raw bytes.
// Useful in databases (in-database RPM version ordering)
use EvrSortKey;
let key_a = from_values;
let key_b = parse;
assert!;
// Evr::sortkey() returns the same thing
assert_eq!;
// Convert to Vec<u8> for storage
let bytes: = key_a.into;
In Python
# Compare EVR strings directly
assert == -1
assert == 1
# Or use the Evr object for structured comparisons
=
=
assert <
# Tilde (~) denotes a pre-release: sorts before the version without it
assert <
# Caret (^) denotes a post-release snapshot: sorts after the base version
assert <
assert <
# Full NEVRA (Name-Epoch-Version-Release-Architecture) parsing
=
# foo 2.3.4 x86_64
# Bulk sorting entirely in Rust (avoids per-comparison FFI overhead)
=
assert ==
=
assert ==
# Evr and Nevra are hashable
=
# Version requirement matching
=
assert
assert
assert not
# String operators also work
=
# Sort keys: encode RPM version ordering into raw bytes.
# Useful in databases (in-database RPM version ordering)
=
=
assert <
# Evr.sortkey() returns the same thing
assert ==
# Use as a sort key for sorted()