summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Rees <maxcrees@me.com>2019-08-13 19:57:39 -0500
committerMax Rees <maxcrees@me.com>2020-03-07 17:36:54 -0600
commit09b2667ddef0f9c574a2e09b3d4670c06196bfdc (patch)
treee08a1f2440bb0e58d987d164a6eb9ebfd951188a
parent664dc6fd3a783713433460188430c4fe7fec6e05 (diff)
downloadabuild-09b2667ddef0f9c574a2e09b3d4670c06196bfdc.tar.gz
abuild-09b2667ddef0f9c574a2e09b3d4670c06196bfdc.tar.bz2
abuild-09b2667ddef0f9c574a2e09b3d4670c06196bfdc.tar.xz
abuild-09b2667ddef0f9c574a2e09b3d4670c06196bfdc.zip
checkapk: compare permissions and ownership of files
-rw-r--r--checkapk.in51
1 files changed, 41 insertions, 10 deletions
diff --git a/checkapk.in b/checkapk.in
index 80572b5..500e9c7 100644
--- a/checkapk.in
+++ b/checkapk.in
@@ -15,6 +15,13 @@ if ! [ -f "$datadir/functions.sh" ]; then
fi
. "$datadir/functions.sh"
+case "$(tar --version)" in
+*GNU*) tar_flavor=GNU;;
+*libarchive*) tar_flavor=libarchive;;
+*busybox*) tar_flavor=busybox;;
+*) die 'unknown tar flavor';;
+esac
+
usage() {
cat >&2 <<-__EOF__
$program $program_version - find ABI breakages in package upgrades
@@ -26,19 +33,45 @@ usage() {
}
pkginfo() {
- apk="$1"
+ local apk="$1"
+ local filename="$2"
+
tar -zxf "$apk" .PKGINFO
mv .PKGINFO .PKGINFO.orig
grep -E \
'^(depend|provides|provider|replaces|triggers|install_if)' \
- .PKGINFO.orig | sort > .PKGINFO
- touch -r .PKGINFO.orig .PKGINFO
+ .PKGINFO.orig | sort > "$filename"
+ touch -r .PKGINFO.orig "$filename"
rm .PKGINFO.orig
}
+filelist() {
+ local apk="$1"
+ local filename="$2"
+ local tar_fmt
+
+ case "$tar_flavor" in
+ GNU)
+ # -rw-r--r-- root/root 737 2019-06-14 20:45 .PKGINFO
+ tar_fmt='{ print $1, $2, $NF }';;
+ libarchive)
+ # -rw-r--r-- 0 root root 737 Jun 14 15:45 .PKGINFO
+ tar_fmt='{ printf "%s %s/%s %s\n", $1, $3, $4, $NF }';;
+ busybox)
+ # -rw-r--r-- root/root 737 2019-06-14 20:45:29 .PKGINFO
+ tar_fmt='{ print $1, $2, $NF }';;
+ esac
+
+ tar -ztvf "$apk" | grep -ve ' \.SIGN\.' \
+ | awk "$tar_fmt" \
+ | sort -k 3,3 > "$filename"
+}
+
check_soname() {
- soname="$1"
+ local soname sover_old basename soname_new sover_new
+ local rdeps real_rdeps i self j
+ soname="$1"
sover_old="${soname#*=}"
soname="${soname%=*}"
basename="${soname%%.so*}.so"
@@ -130,14 +163,12 @@ for i in $pkgname $subpackages; do
oldapk="${oldapk##Downloading }.apk"
[ -e "$oldapk" ] || die "can't find old apk $oldapk"
- pkginfo "$oldapk"
- mv .PKGINFO "pkginfo-$_pkgname-old"
- pkginfo "$filepath"
- mv .PKGINFO "pkginfo-$_pkgname-new"
+ pkginfo "$oldapk" "pkginfo-$_pkgname-old"
+ pkginfo "$filepath" "pkginfo-$_pkgname-new"
- tar -ztf "$oldapk" | grep -ve '^\.SIGN\.' | sort > "filelist-$_pkgname-old"
+ filelist "$oldapk" "filelist-$_pkgname-old"
touch -r "pkginfo-$_pkgname-old" "filelist-$_pkgname-old"
- tar -ztf "$filepath" | grep -v '^\.SIGN\.' | sort > "filelist-$_pkgname-new"
+ filelist "$filepath" "filelist-$_pkgname-new"
touch -r "pkginfo-$_pkgname-new" "filelist-$_pkgname-new"
diff -u "filelist-$_pkgname-old" "filelist-$_pkgname-new" || true