From bb5b2c7567a71129d077e850cdcf5c03cab7d237 Mon Sep 17 00:00:00 2001 From: Max Rees Date: Thu, 8 Aug 2019 05:09:06 -0500 Subject: checkapk: factor soname checking into separate function --- checkapk.in | 80 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 37 deletions(-) (limited to 'checkapk.in') diff --git a/checkapk.in b/checkapk.in index b07ea1b..784661f 100644 --- a/checkapk.in +++ b/checkapk.in @@ -36,6 +36,46 @@ pkginfo() { rm .PKGINFO.orig } +check_soname() { + soname="$1" + + sover_old="${soname#*=}" + soname="${soname%=*}" + basename="${soname%%.so*}.so" + soname_new="$(grep -F "provides = $basename" \ + "pkginfo-$_pkgname-new" | cut -d ' ' -f 3)" + sover_new="${soname_new#*=}" + soname_new="${soname_new%=*}" + + if [ -z "$soname_new" ]; then + warning "no new version of $soname! (or in a different apk)" + else + warning "$soname=$sover_old -> $soname_new=$sover_new" + fi + + rdeps="$(apk search --repositories-file "$tmpdir/repositories" \ + --rdepends --quiet "$soname" | sort -u)" + + real_rdeps= + for i in $rdeps; do + self=0 + for j in $pkgname $subpackages; do + [ "$i" = "$j" ] || continue + self=1 + break + done + [ "$self" -eq 0 ] && real_rdeps="$real_rdeps +$i" + done + + if [ -n "$real_rdeps" ]; then + warning "dependents on $soname:" + printf '%s\n' "$real_rdeps" | sed '/^$/d; s/^/\t/' >&2 + else + msg "No dependents on $soname." + fi +} + if [ $# -gt 0 ]; then usage exit 2 @@ -78,10 +118,10 @@ for i in $pkgname $subpackages; do grep -E "^https?:" /etc/apk/repositories > "$tmpdir/repositories" if ! oldapk="$(apk fetch --repositories-file "$tmpdir/repositories" "$_pkgname")"; then - warning "Could not download $_pkgname (network error or new package)" + warning "could not download $_pkgname (network error or new package)" continue fi - [ -n "$oldapk" ] || die "cannot determine new apk name" + [ -n "$oldapk" ] || die "can't determine new apk name" oldapk="${oldapk##Downloading }.apk" [ -e "$oldapk" ] || die "can't find old apk $oldapk" @@ -100,41 +140,7 @@ for i in $pkgname $subpackages; do soname= for soname in $(awk '/^-provides = so:/ { print $3 }' pkginfo-diff); do - sover_old="${soname#*=}" - soname="${soname%=*}" - basename="${soname%%.so*}.so" - soname_new="$(grep -F "provides = $basename" \ - "pkginfo-$_pkgname-new" | cut -d ' ' -f 3)" - sover_new="${soname_new#*=}" - soname_new="${soname_new%=*}" - - if [ -z "$soname_new" ]; then - warning "No new version of $soname! (or in a different apk)" - else - warning "$soname=$sover_old -> $soname_new=$sover_new" - fi - - rdeps="$(apk search --repositories-file "$tmpdir/repositories" \ - --rdepends --quiet "$soname" | sort -u)" - - real_rdeps= - for i in $rdeps; do - self=0 - for j in $pkgname $subpackages; do - [ "$i" = "$j" ] || continue - self=1 - break - done - [ "$self" -eq 0 ] && real_rdeps="$real_rdeps -$i" - done - - if [ -n "$real_rdeps" ]; then - warning "Dependents on $soname:" - printf '%s\n' "$real_rdeps" | sed '/^$/d; s/^/\t/' >&2 - else - msg "No dependents on $soname." - fi + check_soname "$soname" done [ -n "$soname" ] || msg "No soname differences for $_pkgname." -- cgit v1.2.3-70-g09d2