summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorchrisjbillington2021-06-26 16:52:34 +1000
committerchrisjbillington2021-06-26 16:52:34 +1000
commit329c1a498266aa4b9a08ed6c72377af160db578a (patch)
treee33db7b8b2a657c5f0219370fdea0c6916f71fea
parent974d80ea5a070c1c961d7faaaa0dc7fe8072c621 (diff)
downloadaur-329c1a498266aa4b9a08ed6c72377af160db578a.tar.gz
Fix bug where kernel packages would be retained
due to another package having a dependency on an abstract `provides` from a kernel, rather than a dependency on the kernel package itself.
-rw-r--r--.SRCINFO3
-rw-r--r--PKGBUILD6
-rwxr-xr-xremove-orphaned-kernels29
3 files changed, 32 insertions, 6 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c9dde7d5678a..7a4b4a5bdb8b 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = remove-orphaned-kernels
pkgdesc = pacman -Rs orphaned kernel and driver packages, excluding currently-running.
- pkgver = 1.0
+ pkgver = 1.1
pkgrel = 1
url = https://aur.archlinux.org/packages/remove-orphaned-kernels/
arch = any
@@ -11,4 +11,3 @@ pkgbase = remove-orphaned-kernels
sha256sums = a6939f973aa8013944354db38d4b42e0bcf69673fbabbc804af9842d27101649
pkgname = remove-orphaned-kernels
-
diff --git a/PKGBUILD b/PKGBUILD
index fb5d1a369546..bc1612efb78d 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,6 +1,6 @@
# Maintainer: Chris Billington <chrisjbillington@gmail.com>
pkgname=remove-orphaned-kernels
-pkgver=1.0
+pkgver=1.1
pkgrel=1
pkgdesc="pacman -Rs orphaned kernel and driver packages, excluding currently-running."
arch=('any')
@@ -8,9 +8,9 @@ url="https://aur.archlinux.org/packages/${pkgname}/"
license=('GPL')
depends=('python' 'sudo')
source=("${pkgname}")
-sha256sums=('a6939f973aa8013944354db38d4b42e0bcf69673fbabbc804af9842d27101649')
+sha256sums=('53e18eb9ba1def9400210467380175ce019af3f7ca35fbd085b27e17fe5cbf8d')
package() {
install -m755 -d "${pkgdir}/usr/bin/"
install -m755 "${srcdir}/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
-} \ No newline at end of file
+}
diff --git a/remove-orphaned-kernels b/remove-orphaned-kernels
index 9e257f2cba38..15e861ea78d3 100755
--- a/remove-orphaned-kernels
+++ b/remove-orphaned-kernels
@@ -20,11 +20,38 @@ def yn_choice(message, default='y'):
sys.exit(1)
+def getdeps(pkg):
+ pkginfo = get_output('pacman', '-Qi', pkg)
+ deps = pkginfo.split('Depends On')[1].split(':')[1].rsplit('\n', 1)[0].split()
+ if 'None' in deps:
+ deps.remove('None')
+ return deps
+
+
+def getrdeps(pkg):
+ pkginfo = get_output('pacman', '-Qi', pkg)
+ rdeps = pkginfo.split('Required By')[1].split(':')[1].rsplit('\n', 1)[0].split()
+ if 'None' in rdeps:
+ rdeps.remove('None')
+ return rdeps
+
+
+def is_directly_required(pkg):
+ # Check if package is required by other packages directly - not including a
+ # requirement on an abstract "provides" that the packages provides. For example, if
+ # a packages depends on WIREGUARD_MODULE, which is provided by all kernel packages,
+ # we don't want that to count.
+ for rdep in getrdeps(pkg):
+ if pkg in getdeps(rdep):
+ return True
+ return False
+
+
running_kernel = get_output('uname', '-r')
running_pkgs = get_output('pacman', '-Qoq', f'{MODULES}/{running_kernel}')
all_kernels = [f'{MODULES}/{k}' for k in os.listdir(MODULES)]
all_pkgs = get_output('pacman', '-Qoq', *all_kernels).split()
-orphaned_packages = get_output('pacman', '-Qdtq', *all_pkgs).split()
+orphaned_packages = [pkg for pkg in all_pkgs if not is_directly_required(pkg)]
non_orphaned = []
orphaned_not_running = []