summaryrefslogtreecommitdiff
path: root/find-deprecated-pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'find-deprecated-pkgs')
-rwxr-xr-xfind-deprecated-pkgs118
1 files changed, 105 insertions, 13 deletions
diff --git a/find-deprecated-pkgs b/find-deprecated-pkgs
index 8b91211..086d017 100755
--- a/find-deprecated-pkgs
+++ b/find-deprecated-pkgs
@@ -17,7 +17,7 @@ repos_armv7h="$repos alarm" # although we don't sync [alarm] we blacklist its pa
# we do not blacklists those packages anywhere
repos_parabola="pcr pcr-multilib pcr-multilib-testing pcr-testing libre libre-multilib libre-multilib-testing libre-testing"
-# Set the blacklist files
+# Set the blacklist files. The packages here always have a [libre] replacement if there's one.
# aur-blacklist.txt is not here since we want to check Arch's official repos
blacklists="blacklist.txt"
@@ -40,18 +40,16 @@ for r in $repos_armv7h; do
done
# Parabola mirrors, used to check [libre] and [pcr] packages
-for r in $1 $2; do
-if [[ $r = parabola ]]; then
+if [[ $1 = parabola ]]; then
for r in $repos_parabola; do
mirrors+=(https://mirror.grapentin.org/parabola/$r/os/x86_64/)
mirrors+=(https://mirror.grapentin.org/parabola/$r/os/i686/)
mirrors+=(https://mirror.grapentin.org/parabola/$r/os/armv7h/)
done
fi
-done
# Sed expresion tested for Nginx, change if needed
-sedexp='s/.*href="//;s/\-any.pkg.tar.xz.*//;s/\-x86_64.pkg.tar.xz.*//;s/\-i686.pkg.tar.xz.*//;s/\-armv7h.pkg.tar.xz.*//'
+sedexp='s/.*href="//;s/\.pkg.tar.xz.*//'
# extra sedexps for special characters/symbols
sedexp+=';s/%2B/+/g;s/%3A/:/g;s/%40/@/g'
@@ -72,6 +70,11 @@ since in blacklists like your-privacy and your-initfreedom we also block
some packages from [pcr] (like jitsi) and [libre] (like icedove), and
probably also from their -multilib, -testing and -multilib-testing derivatives.
+Note that the package architecture is always specified with 'parabola', and
+in 'arch' only when there's an uneeded replacement. This is because your-freedom
+is for any architecture and no matter if you use Parabola x86_64 or i686, it
+will always conflict packages that are even for armv7h only (and vice versa).
+
To easily remove a line, you can use the following sed expresion:
sed '/^pkgname:/d' -i blacklist_file.txt
@@ -82,11 +85,25 @@ mkpkglist() {
parabola_pkgs=$(mktemp)
arch_pkgs=$(mktemp)
case $1 in
- parabola) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp |
- for f in $(cat /dev/stdin); do echo ${f%-*-*} >> $parabola_pkgs; done
+ parabola) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp > $parabola_pkgs
+
+ # Separate packages by architecture
+ for arch in x86_64 i686 armv7h any; do
+ grep $arch$ $parabola_pkgs | for f in $(</dev/stdin); do
+ echo "${f%-*-*-*} $arch" >> $parabola_pkgs-$arch
+ done
+ done
+ cat $parabola_pkgs-{x86_64,i686,armv7h,any} | sort -u > $parabola_pkgs
;;
- arch) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp |
- for f in $(cat /dev/stdin); do echo ${f%-*-*} >> $arch_pkgs; done
+ arch) curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp > $arch_pkgs
+
+ # Separate packages by architecture
+ for arch in x86_64 i686 armv7h any; do
+ grep $arch$ $arch_pkgs | for f in $(</dev/stdin); do
+ echo "${f%-*-*-*} $arch" >> $arch_pkgs-$arch
+ done
+ done
+ cat $arch_pkgs-{x86_64,i686,armv7h,any} | sort -u > $arch_pkgs
;;
esac
}
@@ -113,21 +130,96 @@ submsg() {
"$1"
}
+compare_pkgs(){
+ # $1 is the pkgname and replacement (used when checking Arch pkgs)
+ # $2 is the packages file list
+
+ # We'll use this when we check Arch's pkgs only
+ if ! [[ -e $libre_pkgs ]]; then
+ libre_pkgs=$(mktemp)
+ for r in libre libre-multilib libre-testing libre-multilib-testing; do
+ mirrors_parabola+=(https://mirror.grapentin.org/parabola/$r/os/x86_64/)
+ mirrors_parabola+=(https://mirror.grapentin.org/parabola/$r/os/i686/)
+ mirrors_parabola+=(https://mirror.grapentin.org/parabola/$r/os/armv7h/)
+ done
+ curl -s ${mirrors[@]} | grep '".*.pkg.tar.xz"' | sed $sedexp > $libre_pkgs
+ for arch in x86_64 i686 armv7h any; do
+ grep $arch$ $libre_pkgs | for f in $(</dev/stdin); do
+ echo "${f%-*-*-*} $arch" >> $libre_pkgs-$arch
+ done
+ done
+ cat $libre_pkgs-{x86_64,i686,armv7h,any} | sort -u > $libre_pkgs
+ fi
+
+ # First check if the pkg is available for
+ # a specific architecture, if not, check
+ # if it's for 'any'
+ package="${1%%:*}"
+ replacement="$(cut -d ":" -f1 <(echo $1))"
+ for arch in x86_64 i686 armv7h; do
+ grep $arch$ $2 | awk '{print $1}' | grep -xw ^$package &> /dev/null || \
+ grep any$ $2 | awk '{print $1}' | grep -xw ^$package &> /dev/null || \
+ if [ $2 = $arch_pkgs ]; then
+ # Check if the package has a replacement, and
+ # if such replacement is available for the same
+ # architectures
+ if ! [[ $replacement = "" ]]; then
+ # If this works, it means the pkg doesn't exist for $arch in Arch,
+ # but we have the [libre] replacement which should be deprecated.
+ grep $arch$ $libre_pkgs | awk '{print $1}' | grep -xw ^$replacement &> /dev/null || \
+ grep any$ $libre_pkgs | awk '{print $1}' | grep -xw ^$replacement &> /dev/null && \
+ to_be_removed+=($arch) || is_not_for+=($arch)
+ else
+ # However if this fails, it means the pkg doesn't have a replacement
+ # for $arch, or it simply doesn't have a replacement.
+ is_not_for+=($arch)
+ fi
+ elif [ $2 = $parabola_pkgs ]; then
+ if ! [[ $replacement = "" ]]; then
+ # Look for the replacement
+ grep $arch$ $parabola_pkgs | awk '{print $1}' | grep -xw ^$replacement &> /dev/null || \
+ grep any$ $parabola_pkgs | awk '{print $1}' | grep -xw ^$replacement &> /dev/null && \
+ to_be_deleted+=($arch) || isnt_for+=($arch)
+ else
+ isnt_for+=($arch)
+ fi
+ fi
+ done
+
+ for arch in ${to_be_removed[@]}; do
+ submsg "$p ($arch) was not found, but we've a [libre] replacement which should be removed"
+ done
+
+ for arch in ${to_be_deleted[@]}; do
+ submsg "$p ($arch) was not found, but we've $replacement as replacement and should be removed"
+ done
+
+ if [[ ${is_not_for[@]} = "x86_64 i686 armv7h" ]]; then
+ submsg "$p was not found"
+ fi
+
+ if [[ ${isnt_for[@]} = "x86_64 i686 armv7h" ]]; then
+ submsg "$p was not found"
+ fi
+}
+
check(){
mkpkglist $1
case $1 in
parabola) msg 'Comparing blacklists with Parabola packages ...'
- pkgs=$(cut -d ":" -f 1 $blacklists_parabola | grep -v ^#)
+ pkgs=$(cut -d ":" -f1 $blacklists_parabola | grep -v ^#)
for p in $pkgs; do
- grep -xw ^$p$ $parabola_pkgs &> /dev/null || submsg "$p was not found"
+ compare_pkgs $p $parabola_pkgs
done
+ rm -f $parabola_pkgs
msg 'done'
;;
arch) msg 'Comparing blacklists with Arch packages ...'
- pkgs=$(cut -d ":" -f 1 $blacklists | grep -v ^#)
+ pkgs=$(grep -v ^# $blacklists | awk '{print $1}')
for p in $pkgs; do
- grep -xw ^$p$ $arch_pkgs &> /dev/null || submsg "$p was not found"
+ compare_pkgs $p $arch_pkgs
done
+ rm -f $arch_pkgs
msg 'done'
;;
*) err "$1 is not a valid argument"