summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rwxr-xr-xrebuild-detector21
-rw-r--r--rebuild-detector.hook.sigbin566 -> 566 bytes
-rw-r--r--rebuild-detector.sigbin566 -> 566 bytes
5 files changed, 22 insertions, 7 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 4e7e6ffcee6c..dcddcb05bb40 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = rebuild-detector
pkgdesc = Pacman hook to automatically detect which packages need to be rebuilt
- pkgver = 1.1.0
+ pkgver = 1.2.0
pkgrel = 1
arch = any
license = MIT
@@ -9,7 +9,7 @@ pkgbase = rebuild-detector
source = rebuild-detector.hook
source = rebuild-detector.hook.sig
validpgpkeys = EB4F9E5A60D32232BB52150C12C87A28FEAC6B20
- sha256sums = 283874f80ef3ee9c93751df25362864e4fefa626ed22bd69be38d2c5fa044342
+ sha256sums = a4678300a04411c74bf7d37a3d56087f3d5427ee7093c0ac75519ac58914d9ba
sha256sums = SKIP
sha256sums = f40d3fbc90c62a7d38795ce1a6600edac3acf2041ea4a4fc987842b6fde5555a
sha256sums = SKIP
diff --git a/PKGBUILD b/PKGBUILD
index ff09108ceb9d..14207b06bdd8 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: Maxim Baz <$pkgname at maximbaz dot com>
pkgname=rebuild-detector
-pkgver=1.1.0
+pkgver=1.2.0
pkgrel=1
pkgdesc="Pacman hook to automatically detect which packages need to be rebuilt"
arch=("any")
@@ -10,7 +10,7 @@ source=("rebuild-detector"
"rebuild-detector.sig"
"rebuild-detector.hook"
"rebuild-detector.hook.sig")
-sha256sums=('283874f80ef3ee9c93751df25362864e4fefa626ed22bd69be38d2c5fa044342'
+sha256sums=('a4678300a04411c74bf7d37a3d56087f3d5427ee7093c0ac75519ac58914d9ba'
'SKIP'
'f40d3fbc90c62a7d38795ce1a6600edac3acf2041ea4a4fc987842b6fde5555a'
'SKIP')
diff --git a/rebuild-detector b/rebuild-detector
index 2bc2dc225b36..7aec2c7ca4b4 100755
--- a/rebuild-detector
+++ b/rebuild-detector
@@ -1,8 +1,9 @@
#!/bin/bash
#
-# Run `ldd` on each binary in /usr/bin and save the broken ones grouped by repo.
+# Detect broken packages that need to be rebuilt and save them grouped by repo.
shopt -s nullglob
+shopt -s extglob
readonly REBUILD_DETECTOR_CACHE_DIR="/var/cache/rebuild-detector"
mkdir -p "$REBUILD_DETECTOR_CACHE_DIR"
@@ -18,28 +19,42 @@ get_binaries() {
}
get_broken_pkgs() {
- parallel --will-cite 'ldd "{}" 2>/dev/null | grep "not found" >/dev/null && pacman -Qo "{}" | cut -d" " -f5'
+ parallel --will-cite 'ldd "{}" 2>/dev/null | grep "not found" >/dev/null && pacman -Qqo "{}"'
}
get_pkg_repo() {
grep " $1" installed | cut -d' ' -f1
}
+get_broken_python_pkgs() {
+ python_version="$(python --version | cut -d'.' -f2)"
+ pacman -Qqo /usr/lib/python3.!($python_version) 2>/dev/null
+}
+
+get_broken_perl_pkgs() {
+ perl_version="$(perl -v | grep -Po '\d+' | head -n2 | paste -sd '.\n')"
+ pacman -Qqo /usr/lib/perl*/!($perl_version) 2>/dev/null
+}
+
tmp=$(mktemp -dt "rebuild-detector.XXXXXXXX") || exit
trap 'rm -rf $tmp' EXIT
cd "$tmp" || exit
+# Detect broken packages
get_installed_pkgs >installed
get_binaries | get_broken_pkgs >broken
+get_broken_python_pkgs >>broken
+get_broken_perl_pkgs >>broken
+# Save broken packages grouped by repo, overriding previous results
rm -f "$REBUILD_DETECTOR_CACHE_DIR/"*.list
-
while read -r pkg; do
repo="$(get_pkg_repo "$pkg")"
echo "$pkg" >>"$REBUILD_DETECTOR_CACHE_DIR/$repo.list"
done <broken
+# Remove duplicates
for list in "$REBUILD_DETECTOR_CACHE_DIR/"*.list; do
sort -u "$list" -o "$list"
done
diff --git a/rebuild-detector.hook.sig b/rebuild-detector.hook.sig
index 2bdc315a80f3..86dfd784ee10 100644
--- a/rebuild-detector.hook.sig
+++ b/rebuild-detector.hook.sig
Binary files differ
diff --git a/rebuild-detector.sig b/rebuild-detector.sig
index 6f8d90e58543..4907692bfb46 100644
--- a/rebuild-detector.sig
+++ b/rebuild-detector.sig
Binary files differ