2 # check for packages on local system with PLD-doc/PLD-update-TODO
3 # Author: Elan Ruusamäe <glen@pld-linux.org>
7 CVSROOT=:pserver:cvs@cvs.pld-linux.org:/cvsroot
12 [ -s $t/pkgs.desc ] || /usr/bin/poldek --skip-installed "$@" --cmd "desc *" > $t/pkgs.desc
13 [ -s $t/pkgs.lst ] || sed -n 's/^Source package: \(.*\)-[^-]\+-[^-]\+$/\1/p' $t/pkgs.desc | sort -u > $t/pkgs.lst
14 # {w32codec,acroread,...}-installer pkgs
15 sed -i -e 's,-installer$,,' $t/pkgs.lst
16 for pkg in $(cat $t/pkgs.lst); do
17 # use awk to match package without any regexp fuzz
18 awk -vpkg=$pkg.spec -vm=1 '$1 == pkg{m=0} END{exit m}' $t/cvs.lst || echo Obsolete: $pkg
22 # generate list of .specs on ftp. needs cvsnt client
25 [ -s $t/cvs.raw ] || cvs -d $CVSROOT -Q ls -e packages > $t/cvs.raw 2>/dev/null
26 [ -s $t/cvs.dirs ] || awk -F/ '$1 == "D" { print $2 } ' $t/cvs.raw > $t/cvs.dirs
27 [ -s $t/cvs.specs ] || {
29 cvs -d $CVSROOT -Q ls -e packages/$pkg/$pkg.spec 2>/dev/null
30 done < $t/cvs.dirs > $t/cvs.lst.tmp && mv $t/cvs.lst.tmp $t/cvs.specs
32 [ -s $t/cvs.lst ] || awk -F/ '$1 == "" { print $2 } ' $t/cvs.specs > $t/cvs.lst
35 # generate list of package basenames from rpmdb
39 [ -s $t/rpm.db ] || rpm -qa --qf '%{SOURCERPM} %{VERSION}\n' > $t/rpm.db
41 # translate pkg names to basenames
42 [ -s $t/rpm.basenames ] || sed -re 's,^(.+)-[^-]+-[^-]+ ,\1 ,' $t/rpm.db > $t/rpm.basenames
44 [ -s $t/rpm.lst ] || sort -u $t/rpm.basenames > $t/rpm.lst
47 # fetch PLD-update-TODO
51 [ -s $t/PLD-doc/PLD-update-TODO ] || {
53 cvs -d $CVSROOT -Q co PLD-doc/PLD-update-TODO
57 # reformat for easier parsing
58 # amaya(13) [OLD] 9.54 [NEW] 11.0
59 # vim [OLD] 7.3.401 [NEW] 7.3.515
60 [ -s $t/rpm.todo ] || sed -rne 's,^([^( ]+).*?\[NEW\] (.+)$,\1 \2,p' $t/PLD-doc/PLD-update-TODO > $t/rpm.todo
62 # TODO: should uniq as well:
63 # $ grep links2 PLD-doc/PLD-update-TODO
64 # links2(22) [OLD] 2.2 [NEW] 2.6
65 # links2(25) [OLD] 2.1pre28 [NEW] 2.6
74 [ -s $t/rpm.diffs ] || {
77 v1=$(awk -vpkg=$pkg '$1 == pkg {print $2}' $t/rpm.lst)
80 cmp=$(rpmvercmp $v1 $v2)