#34 RFE: rpmsort to sort list of NEVRAs properly
Closed 7 years ago Opened 7 years ago 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?

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

7 years ago

Log in to comment on this ticket.

Metadata