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 "$@"