From db4d302c52870197ae7b0a01ec258c63a14e2d4b Mon Sep 17 00:00:00 2001 From: David P Date: Wed, 5 Sep 2018 14:29:54 -0300 Subject: remove deprecated pkgs Signed-off-by: David P --- find-deprecated-pkgs | 118 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 105 insertions(+), 13 deletions(-) (limited to 'find-deprecated-pkgs') 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 $(> $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 $(> $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 $(> $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" -- cgit v1.2.2