|
Bernhard M. Wiedemann |
88e749 |
#!/bin/sh
|
|
Bernhard M. Wiedemann |
88e749 |
# rpmsort implemented mostly in Lua
|
|
Bernhard M. Wiedemann |
88e749 |
# Copyright (c) 2020 SUSE LLC
|
|
Bernhard M. Wiedemann |
88e749 |
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
Bernhard M. Wiedemann |
88e749 |
# Author: fvogt@suse.de
|
|
Bernhard M. Wiedemann |
88e749 |
# Enhanced by: mwilck@suse.com
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
rpmsort() {
|
|
Bernhard M. Wiedemann |
88e749 |
direction=$1
|
|
Bernhard M. Wiedemann |
88e749 |
script='
|
|
Bernhard M. Wiedemann |
88e749 |
function parse(ver)
|
|
Bernhard M. Wiedemann |
88e749 |
local epoch, version, release = 0, ver, 0
|
|
Bernhard M. Wiedemann |
88e749 |
_, eend, e = ver:find("^(%d+):")
|
|
Bernhard M. Wiedemann |
88e749 |
if eend then
|
|
Bernhard M. Wiedemann |
88e749 |
ver = ver:sub(eend + 1)
|
|
Bernhard M. Wiedemann |
88e749 |
version = ver
|
|
Bernhard M. Wiedemann |
88e749 |
epoch = e
|
|
Bernhard M. Wiedemann |
88e749 |
end
|
|
Bernhard M. Wiedemann |
88e749 |
_, _, v, r = ver:find("(.+)%-(.+)$")
|
|
Bernhard M. Wiedemann |
88e749 |
if v then
|
|
Bernhard M. Wiedemann |
88e749 |
version = v
|
|
Bernhard M. Wiedemann |
88e749 |
release = r
|
|
Bernhard M. Wiedemann |
88e749 |
end
|
|
Bernhard M. Wiedemann |
88e749 |
return epoch, version, release
|
|
Bernhard M. Wiedemann |
88e749 |
end
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
function pkgvercmp(a, b)
|
|
Bernhard M. Wiedemann |
88e749 |
local ae, av, ar = parse(a)
|
|
Bernhard M. Wiedemann |
88e749 |
local be, bv, br = parse(b)
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
local ecmp = rpm.vercmp(ae, be)
|
|
Bernhard M. Wiedemann |
88e749 |
if ecmp ~= 0 then return ecmp end
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
local vcmp = rpm.vercmp(av, bv)
|
|
Bernhard M. Wiedemann |
88e749 |
if vcmp ~= 0 then return vcmp end
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
return rpm.vercmp(ar, br)
|
|
Bernhard M. Wiedemann |
88e749 |
end
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
vers = {}
|
|
Bernhard M. Wiedemann |
88e749 |
for line in io.stdin:lines() do
|
|
Bernhard M. Wiedemann |
88e749 |
table.insert(vers, line)
|
|
Bernhard M. Wiedemann |
88e749 |
end
|
|
Bernhard M. Wiedemann |
88e749 |
table.sort(vers, function(a, b) return pkgvercmp(a, b) == '"$direction"' end)
|
|
Bernhard M. Wiedemann |
88e749 |
print(table.concat(vers, "\n"))
|
|
Bernhard M. Wiedemann |
88e749 |
'
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
rpm --eval "%{lua: ${script}}"
|
|
Bernhard M. Wiedemann |
1250f9 |
}
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
usage() {
|
|
Bernhard M. Wiedemann |
88e749 |
cat >&2 <
|
|
Bernhard M. Wiedemann |
88e749 |
$0 - sort input according to rpm version sorting conventions
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
Expects rpm package versions separated by newlines as input and outputs
|
|
Bernhard M. Wiedemann |
88e749 |
them sorted according to rpm version sorting conventions, with old versions
|
|
Bernhard M. Wiedemann |
88e749 |
at the top.
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
Options:
|
|
Bernhard M. Wiedemann |
88e749 |
-r|--reverse sort backwards
|
|
Bernhard M. Wiedemann |
88e749 |
-h|--help print this help
|
|
Bernhard M. Wiedemann |
88e749 |
EOF
|
|
Bernhard M. Wiedemann |
88e749 |
exit 0
|
|
Bernhard M. Wiedemann |
1250f9 |
}
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
DIRECTION=-1
|
|
Bernhard M. Wiedemann |
88e749 |
while [ $# -gt 0 ]; do
|
|
Bernhard M. Wiedemann |
88e749 |
case $1 in
|
|
Bernhard M. Wiedemann |
88e749 |
-r|--reverse) DIRECTION=1;;
|
|
Bernhard M. Wiedemann |
88e749 |
-h|--help) usage;;
|
|
Bernhard M. Wiedemann |
88e749 |
*) echo "$0: invalid parameter $1 ignored" >&2;;
|
|
Bernhard M. Wiedemann |
88e749 |
esac
|
|
Bernhard M. Wiedemann |
88e749 |
shift
|
|
Bernhard M. Wiedemann |
88e749 |
done
|
|
Bernhard M. Wiedemann |
1250f9 |
|
|
Bernhard M. Wiedemann |
88e749 |
rpmsort "$DIRECTION"
|