diff options
Diffstat (limited to 'wwwbin/rpmcheck.sh')
-rw-r--r-- | wwwbin/rpmcheck.sh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/wwwbin/rpmcheck.sh b/wwwbin/rpmcheck.sh new file mode 100644 index 0000000..b829eca --- /dev/null +++ b/wwwbin/rpmcheck.sh @@ -0,0 +1,95 @@ +#!/bin/sh +# check for packages on local system with PLD-doc/PLD-update-TODO +# Author: Elan Ruusamäe <glen@pld-linux.org> +# Date: 2012-04-05 + +export LC_ALL=C +CVSROOT=:pserver:cvs@cvs.pld-linux.org:/cvsroot +d=$- + +orphaned_pkgs() { + set -$d + [ -s $t/pkgs.desc ] || /usr/bin/poldek --skip-installed "$@" --cmd "desc *" > $t/pkgs.desc + [ -s $t/pkgs.lst ] || sed -n 's/^Source package: \(.*\)-[^-]\+-[^-]\+$/\1/p' $t/pkgs.desc | sort -u > $t/pkgs.lst + # {w32codec,acroread,...}-installer pkgs + sed -i -e 's,-installer$,,' $t/pkgs.lst + for pkg in $(cat $t/pkgs.lst); do + # use awk to match package without any regexp fuzz + awk -vpkg=$pkg.spec -vm=1 '$1 == pkg{m=0} END{exit m}' $t/cvs.lst || echo Obsolete: $pkg + done +} + +# generate list of .specs on ftp. needs cvsnt client +cvs_pkgs() { + set -$d + [ -s $t/cvs.raw ] || cvs -d $CVSROOT -Q ls -e packages > $t/cvs.raw 2>/dev/null + [ -s $t/cvs.dirs ] || awk -F/ '$1 == "D" { print $2 } ' $t/cvs.raw > $t/cvs.dirs + [ -s $t/cvs.specs ] || { + while read pkg; do + cvs -d $CVSROOT -Q ls -e packages/$pkg/$pkg.spec 2>/dev/null + done < $t/cvs.dirs > $t/cvs.lst.tmp && mv $t/cvs.lst.tmp $t/cvs.specs + } + [ -s $t/cvs.lst ] || awk -F/ '$1 == "" { print $2 } ' $t/cvs.specs > $t/cvs.lst +} + +# generate list of package basenames from rpmdb +rpm_pkgs() { + set -$d + + [ -s $t/rpm.db ] || rpm -qa --qf '%{SOURCERPM} %{VERSION}\n' > $t/rpm.db + + # translate pkg names to basenames + [ -s $t/rpm.basenames ] || sed -re 's,^(.+)-[^-]+-[^-]+ ,\1 ,' $t/rpm.db > $t/rpm.basenames + # uniq + [ -s $t/rpm.lst ] || sort -u $t/rpm.basenames > $t/rpm.lst +} + +# fetch PLD-update-TODO +cvs_todo() { + set -$d + + [ -s $t/PLD-doc/PLD-update-TODO ] || { + cd $t + cvs -d $CVSROOT -Q co PLD-doc/PLD-update-TODO + cd - + } + + # reformat for easier parsing + # amaya(13) [OLD] 9.54 [NEW] 11.0 + # vim [OLD] 7.3.401 [NEW] 7.3.515 + [ -s $t/rpm.todo ] || sed -rne 's,^([^( ]+).*?\[NEW\] (.+)$,\1 \2,p' $t/PLD-doc/PLD-update-TODO > $t/rpm.todo + + # TODO: should uniq as well: + # $ grep links2 PLD-doc/PLD-update-TODO + # links2(22) [OLD] 2.2 [NEW] 2.6 + # links2(25) [OLD] 2.1pre28 [NEW] 2.6 +} + +rpm_diff() { +# set -$d + + rpm_pkgs + cvs_todo + + [ -s $t/rpm.diffs ] || { + set +e + while read pkg v2; do + v1=$(awk -vpkg=$pkg '$1 == pkg {print $2}' $t/rpm.lst) + [ "$v1" ] || continue + + cmp=$(rpmvercmp $v1 $v2) + if [ $? -eq 2 ]; then + echo "$pkg $cmp" + fi + done < $t/rpm.todo + set -e + } +} + +set -e +t=$(mktemp -d) +#t=. + +rpm_diff + +rm -rf $t |