commit 0ef91a7

hovercats  ·  2024-12-31 04:38:58 +0000 UTC
parent ebbbbb8
add outdated. simple way of checking for outdated packages, seeing as outdated.py no longer work.
mostly similar to kiss-outdated with only a minor change for it to work with oasis' format.
1 files changed,  +160, -0
+160, -0
  1@@ -0,0 +1,160 @@
  2+#!/bin/sh
  3+# Check repository for outdated packages
  4+
  5+die() {
  6+    printf '%s\n' "$*" >&2
  7+    exit 1
  8+}
  9+
 10+mkcd() {
 11+    mkdir -p "$1" && cd "$1"
 12+}
 13+
 14+repology_name() {
 15+    # Fix any known naming inconsistences between packages and Repology.
 16+    remote=$(
 17+        # Strip unrelated suffixes.
 18+        remote=${1%%-bin}
 19+        remote=${remote%%-git}
 20+
 21+        # Remote names are all lowercase.
 22+        tr '[:upper:]' '[:lower:]' <<EOF |
 23+$remote
 24+EOF
 25+        # Remote always uses -.
 26+        tr _ -
 27+    )
 28+
 29+    case $remote in
 30+        cairo)
 31+            remote=cairo-graphics-library
 32+        ;;
 33+        
 34+        liberation-fonts)
 35+            remote=fonts:liberation
 36+        ;;
 37+
 38+        libjpeg)
 39+            remote=ijg-libjpeg
 40+        ;;
 41+
 42+        libmupdf | libxaw3d)
 43+            # TODO [community]: Rename packages?
 44+            remote=${remote##lib}
 45+        ;;
 46+
 47+        linux-headers)
 48+            remote=linux
 49+        ;;
 50+
 51+        lpeg)
 52+            remote=lua:lpeg
 53+        ;;
 54+
 55+        samurai)
 56+            remote=samurai-build-tool
 57+        ;;
 58+        
 59+        sshfs)
 60+            remote=fusefs:sshfs
 61+        ;;
 62+        
 63+        surf)
 64+            remote=surf-browser
 65+        ;;
 66+
 67+        st)
 68+            remote=st-term
 69+        ;;
 70+
 71+        terminus-font)
 72+            remote=fonts:terminus
 73+        ;;
 74+
 75+        vis)
 76+            remote=vis-editor
 77+        ;;
 78+
 79+        webkit2gtk)
 80+            # TODO [community]: Rename package?
 81+            remote=webkitgtk
 82+        ;;
 83+
 84+        tz)
 85+        	remote=tzdata
 86+        ;;
 87+
 88+        libpkgconf)
 89+        	remote=pkgconf
 90+        ;;
 91+
 92+    esac
 93+}
 94+
 95+repology_version() {
 96+    [ -f "$1.svg" ] || return 1
 97+    read -r remote_ver < "$1.svg" || :
 98+    remote_ver=${remote_ver%</text>*}
 99+    remote_ver=${remote_ver##*>}
100+}
101+
102+repo_version() {
103+    read -r ver _ 2>/dev/null < "$2/ver" || {
104+        printf '%-30s local version not found\n' "$1" >&2
105+        return 1
106+    }
107+
108+    [ "$ver" != git ]
109+}
110+
111+get_outdated() {
112+    repo=${PWD%%/}
113+    printf '\n[Checking Repology for outdated packages in %s]\n\n' "$repo" >&2
114+
115+    for pkg in */; do
116+        pkg=${pkg%%/}
117+        repology_name "${pkg##*/}"
118+
119+        [ "$remote" = - ] ||
120+            set -- "$@" -z "$remote.svg" \
121+                "https://repology.org/badge/latest-versions/$remote.svg"
122+    done
123+
124+    mkcd "$tmp/${repo##*/}"
125+
126+    curl -SsZA 'kiss-outdated' --parallel-max 16 --remote-name-all "$@" ||
127+        die 'fatal: network error'
128+
129+    for _pkg in "$OLDPWD"/*/; do
130+        pkg=${_pkg%%/}
131+        pkg=${pkg##*/}
132+
133+        repo_version  "$pkg" "$_pkg" || continue
134+        repology_name "$pkg"
135+        repology_version "$remote" || continue
136+
137+        case $remote_ver in
138+            *", $ver"* | *"$ver,"* | "$ver" | '') continue ;;
139+            -) printf '%-30s no remote version found\n' "$pkg" >&2; continue ;;
140+        esac
141+
142+        printf '%-30s %s -> %s\n' "$pkg" "$ver" "$remote_ver"
143+    done
144+}
145+
146+main() {
147+    set -e
148+
149+    [ "$1" ] || set -- "$PWD"
150+
151+    mkdir -p "${tmp:=${XDG_CACHE_HOME:-"$HOME/.cache"}/kiss/repology}"
152+
153+    for repo do
154+        old_pwd=$PWD
155+        cd "$repo"
156+        get_outdated
157+        cd "$old_pwd"
158+    done
159+}
160+
161+main "$@"