#34 RFE: rpmsort to sort list of NEVRAs properly
Closed Opened by ignatenkobrain.

Normal sort is not aware of rpm version comparison, neither about names and such, so would be nice to write some tools which would do that...

I wrote something similar for myself:

import sys
import functools
import rpm
def split_nevra(nevra):
    nevr, arch = nevra.rsplit(".", 1)
    name, ev, release = nevr.rsplit("-", 2)
    if ":" in ev:
        epoch, version = ev.rsplit(":", 1)
    else:
        epoch = ""
        version = ev
    return name, epoch, version, release, arch
def cmp_evr(s1, s2):
    _, e1, v1, r1, _ = split_nevra(s1)
    _, e2, v2, r2, _ = split_nevra(s2)
    return rpm.labelCompare((e1, v1, r1), (e2, v2, r2))
with open(sys.argv[1], "r") as f:
    lines = f.readlines()
lines = sorted(sorted(sorted(lines, key=lambda x: split_nevra(x)[-1]), key=functools.cmp_to_key(cmp_evr)), key=lambda x: split_nevra(x)[0])
with open(sys.argv[1], "w") as f:
    f.writelines(lines)

Are you aware of rpmdev-sort which is already included in rpmdevtools?

ohh, missed that...

Metadata Update from @ignatenkobrain:
- Issue status updated to: Closed (was: Open)

Metadata