summaryrefslogtreecommitdiff
path: root/wwwbin
diff options
context:
space:
mode:
authorElan Ruusamäe2012-05-04 06:47:09 (GMT)
committerElan Ruusamäe2012-05-04 06:47:09 (GMT)
commitc808fcaf6bcfb57d9379a704fd85e4f71527e29b (patch)
treed42d6d1e5518ba012e20a2d480cb8927735f86d8 /wwwbin
parented1ec331fd8005cbcf0822f88867951f8ab58af3 (diff)
downloadpld-ftp-admin-c808fcaf6bcfb57d9379a704fd85e4f71527e29b.zip
pld-ftp-admin-c808fcaf6bcfb57d9379a704fd85e4f71527e29b.tar.gz
- script to show local rpmdb vs PLD-update-TODO upgrade difference
Changed files: wwwbin/rpmcheck.sh -> 1.1
Diffstat (limited to 'wwwbin')
-rw-r--r--wwwbin/rpmcheck.sh95
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