summaryrefslogtreecommitdiffstats
path: root/scripts/ipkg-remove
blob: e7516c3d3da39e56bcbc69a163cf317facf937a3 (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
#!/usr/bin/env bash

sourcename="$1"; shift

for pkg in "$@"; do
	case "$pkg" in
		*/"${sourcename}_"*.ipk|\
		*/"${sourcename}-"[0-9]*.apk)
			rm -vf "$pkg"
		;;
		*.ipk)
			tar -Ozxf "$pkg" ./control.tar.gz 2>/dev/null | tar -Ozxf - ./control 2>/dev/null | {
				packagename=
				abiversion=
				while read field value; do
					case "$field" in
						Package:) packagename="$value";;
						ABIVersion:) abiversion="$value";;
					esac
				done
				[ -n "$abiversion" ] && packagename="${packagename%%$abiversion}"
				[ "$packagename" = "$sourcename" ] && rm -vf "$pkg"
			}
		;;
		*.apk)
			apk adbdump "$pkg" | grep -E '^  (name:|.*openwrt:abiversion)' | {
				packagename=
				abiversion=
				while read field value; do
					case "$field" in
						name:) packagename="$value";;
						-) abiversion="${value##*abiversion=}";;
					esac
				done
				[ -n "$abiversion" ] && packagename="${packagename%%$abiversion}"
				[ "$packagename" = "$sourcename" ] && rm -vf "$pkg"
			}
		;;
	esac
done

exit 0