Author: glen                         Date: Fri May  4 06:47:14 2012 GMT
Module: pld-ftp-admin                 Tag: HEAD
---- Log message:
- script to show local rpmdb vs PLD-update-TODO upgrade difference

---- Files affected:
pld-ftp-admin/wwwbin:
   rpmcheck.sh (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: pld-ftp-admin/wwwbin/rpmcheck.sh
diff -u /dev/null pld-ftp-admin/wwwbin/rpmcheck.sh:1.1
--- /dev/null   Fri May  4 08:47:14 2012
+++ pld-ftp-admin/wwwbin/rpmcheck.sh    Fri May  4 08:47:09 2012
@@ -0,0 +1,95 @@
+#!/bin/sh
+# check for packages on local system with PLD-doc/PLD-update-TODO
+# Author: Elan Ruusamäe <[email protected]>
+# Date: 2012-04-05
+
+export LC_ALL=C
+CVSROOT=:pserver:[email protected]:/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
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to