aboutsummaryrefslogtreecommitdiff
path: root/contrib/kiss-outdated
blob: 27bb1ee2503a26893f8c8d0595abc187f5398ac5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/sh
# Check installed packages for updates

old_IFS=$IFS

# Notify the user
printf '\033[1;33m-> \033[1;36mnote \033[m%s\n' \
    "If you are doing too many requests you will note be" \
    "able to get information for every package you have" >&2

# List via arguments or all installed packages.
if [ "$1" ]; then
    set -- printf '%s\n' "$@"
else
    set -- kiss l
fi

"$@" | (while read -r pkg _; do {
    read -r ver _ < "/var/db/kiss/installed/$pkg/version"

    # Fix some package names.
    case $pkg in
        *-bin) fix=${pkg%%-bin} ;;
    esac
    
    # Grab the repology version from the SVG file.
    rep=$(curl -s "https://repology.org/badge/latest-versions/${fix:-$pkg}.svg")

    # Skip these instead of outputting empty
    # version informations.
    # shellcheck disable=2106
    case "$rep" in (*'Too Many Requests'*) continue ;; esac

    rep=${rep%</text>*}
    rep=${rep##*>}

    # Skip these.
    # shellcheck disable=2106
    {
        [ "${rep:--}" = - ]  && continue
        [ "$ver" = git ]     && continue
    }

    # Split the comma separated list.
    # shellcheck disable=2086
    {
        IFS=', ' 
        set -f
        set +f -- $rep
        IFS=$old_IFS
    }

    # Parse comma separated version lists.
    {
        for v; do case $v in "$ver") match=1; esac; done

        [ "$match" ] || printf '%s\n' "$pkg $ver -> $rep"
    }
} & done; wait)