LittleDemon WebShell


Linux hosting5.siteguarding.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64
Path : /bin/
File Upload :
Command :
Current File : //bin/rpmdev-sort

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
#
# rpmdev-sort -- sort rpms from standard input
#
# Copyright (c) 2010 Dan Horak
#               2010 Ville Skyttä
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

import re
import sys

import rpm


def usage():
    print ("""
rpmdev-sort # with no arguments, processes standard input

Sort the package list given on standard input, one per line.
Empty and commented out lines are ignored, comment character is #.
Supported formats:
    Name-Version-Release
    Epoch:Name-Version-Release
    Name-Epoch:Version-Release
""")

EPOCH_RE = re.compile(r"^(\d+):")

def parse_nevr(s):
    ss = s.split('-')
    while (len(ss) < 3):
        ss.append("")
    r = ss.pop()
    v = ss.pop()
    e = ""

    m = EPOCH_RE.search(v)
    if m: # N-E:V-R
        e = m.group(1)
        v = v[len(m.group(0)):]
    else:
        m = EPOCH_RE.search(ss[0])
        if m: # E:N-V-R
            e = m.group(1)
            ss[0] = ss[0][len(m.group(0)):]

    return ("-".join(ss), e, v, r)

def rpm_compare(a, b):
    (an, ae, av, ar) = parse_nevr(a)
    (bn, be, bv, br) = parse_nevr(b)

    if an > bn:
        return 1
    elif an < bn:
        return -1
    else:
        return rpm.labelCompare((ae, av, ar), (be, bv, br))

def main():
    if len(sys.argv) > 1 and \
            sys.argv[1] in ['-h', '--help', '-help', '--usage']:
        usage()
        sys.exit(0)

    lines = []
    while True:
        line = sys.stdin.readline()
        if len(line) == 0:
            break
        line = line.strip()
        if len(line) and not line.startswith("#"):
            lines.append(line)
    lines.sort(rpm_compare)
    for line in lines:
        print line

if __name__ == "__main__":
    main()

LittleDemon - FACEBOOK
[ KELUAR ]