]> TLD Linux GIT Repositories - tld-ftp-admin.git/blob - wwwbin/rpmcheck.sh
- raw from PLD
[tld-ftp-admin.git] / wwwbin / rpmcheck.sh
1 #!/bin/sh
2 # check for packages on local system with PLD-doc/PLD-update-TODO
3 # Author: Elan Ruusamäe <glen@pld-linux.org>
4 # Date: 2012-04-05
5
6 export LC_ALL=C
7 CVSROOT=:pserver:cvs@cvs.pld-linux.org:/cvsroot
8 d=$-
9
10 # generate list of package basenames from rpmdb
11 rpm_pkgs() {
12         set -$d
13
14         [ -s $t/rpm.db ] || rpm -qa --qf '%{SOURCERPM} %{VERSION}\n' > $t/rpm.db
15
16         # translate pkg names to basenames
17         [ -s $t/rpm.basenames ] || sed -re 's,^(.+)-[^-]+-[^-]+ ,\1 ,' $t/rpm.db > $t/rpm.basenames
18         # uniq
19         [ -s $t/rpm.lst ] || sort -u $t/rpm.basenames > $t/rpm.lst
20 }
21
22 # fetch PLD-update-TODO
23 cvs_todo() {
24         set -$d
25
26         [ -s $t/PLD-doc/PLD-update-TODO ] || (cd $t; cvs -d $CVSROOT -Q co PLD-doc/PLD-update-TODO)
27
28         # reformat for easier parsing
29         # amaya(13) [OLD] 9.54 [NEW] 11.0
30         # vim [OLD] 7.3.401 [NEW] 7.3.515
31         [ -s $t/rpm.todo ] || sed -rne 's,^([^( ]+).*?\[NEW\] (.+)$,\1 \2,p' $t/PLD-doc/PLD-update-TODO > $t/rpm.todo
32
33         # TODO: should uniq as well:
34         # $ grep links2 PLD-doc/PLD-update-TODO 
35         # links2(22) [OLD] 2.2 [NEW] 2.6
36         # links2(25) [OLD] 2.1pre28 [NEW] 2.6
37 }
38
39 rpm_diff() {
40 #       set -$d
41
42         rpm_pkgs
43         cvs_todo
44
45         [ -s $t/rpm.diffs ] || {
46                 set +e
47                 while read pkg v2; do
48                         v1=$(awk -vpkg=$pkg '$1 == pkg {print $2}' $t/rpm.lst)
49                         [ "$v1" ] || continue
50
51                         cmp=$(rpmvercmp $v1 $v2)
52                         if [ $? -eq 2 ]; then
53                                 echo "$pkg $cmp"
54                         fi
55                 done < $t/rpm.todo
56                 set -e
57         }
58 }
59
60 set -e
61 t=$(mktemp -d)
62 #t=.
63
64 rpm_diff
65
66 rm -rf $t