HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: //proc/37320/cwd/lib/grub/grub-sort-version
#!/usr/bin/python3
#
"""Script to sort kernel versions."""
import apt_pkg
import argparse
import re
import sys
import os
import typing


def order_index(order: list[re.Pattern[str]], abi: str) -> int:
    """Return the index of abi in order"""
    for i, entry in zip(range(len(order)), order):
        if entry.match(abi):
            return i
    return len(order)


class KernelABI:
    """Orderable kernel ABI string."""

    def __init__(self, abi: str, order: list[re.Pattern[str]]):
        self.abi = abi
        self._index = order_index(order, self.abi)

    def __lt__(self, other: "KernelABI") -> bool:
        if self._index != other._index:
            # Ordering is reversed, what should be considered highest comes first.
            return self._index > other._index
        return apt_pkg.version_compare(f"{self.abi}-0", f"{other.abi}-0") < 0


def main() -> None:
    """Entry point."""
    apt_pkg.init()

    parser = argparse.ArgumentParser(
        prog="grub-sort-version", description="sort kernel ABIs"
    )
    parser.add_argument("-r", "--reverse", action="store_true")
    args = parser.parse_args()

    order = []
    for flavour in os.environ.get("GRUB_FLAVOUR_ORDER", "").split():
        order.append(re.compile(f"[\\s\\S]*-{flavour}(\\s*\\d*)$"))

    versions = [KernelABI(line.rstrip(), order) for line in sys.stdin]
    versions.sort(reverse=args.reverse)

    for v in versions:
        print(v.abi)


if __name__ == "__main__":
    main()