]> git.pld-linux.org Git - projects/pld-ftp-admin.git/commitdiff
show src.rpm package name in reports; very hackish due poldek bugs/missing features
authorElan Ruusamäe <glen@pld-linux.org>
Wed, 1 Aug 2012 15:28:34 +0000 (15:28 +0000)
committerElan Ruusamäe <glen@pld-linux.org>
Wed, 1 Aug 2012 15:28:34 +0000 (15:28 +0000)
Changed files:
    wwwbin/consistency-check.sh -> 1.3

wwwbin/consistency-check.sh

index 9a2090090883da82174572bf4b248e846f206040..5e12c2ed8a857419e2e171600ad86586ac537fed 100644 (file)
@@ -8,6 +8,7 @@ filter_deps() {
        grep -v "/eclipse/"
 }
 
+# group errors by same error kind
 group_deps() {
        local t=$(mktemp)
        cat > $t
@@ -17,6 +18,66 @@ group_deps() {
        rm -f $t
 }
 
+# convert pkg name to src.rpm name
+# uses poldek
+# TODO: simplify when these bugs get a solution:
+# https://bugs.launchpad.net/poldek/+bug/1031762
+# https://bugs.launchpad.net/poldek/+bug/1031767
+pkg2src() {
+       local t=$(mktemp)
+       local t1=$(mktemp)
+       local t2=$(mktemp)
+       local t3=$(mktemp)
+
+       # save input
+       cat > $t
+
+       # error: arcconf-7.0.18786-1: req libstdc++.so.5()(64bit) not found
+       # need to include arch as '*', due this bug: https://bugs.launchpad.net/poldek/+bug/1031762
+       sed -ne 's/error: \(.*\): req .* not found/\1/p' $t | sort -u > $t1
+
+       # poldek:/all-avail> ls -s arcconf-7.0.18786-1.*
+       # arcconf-7.0.18786-1.x86_64     arcconf-7.0.18786-1.src.rpm
+       #poldek --cmd < $t > $t2
+       # poldek is an ass, it doesn't allow stdout to be redirected: "error: not a tty"
+       # hack around with script(1) by capturing whole ls output
+       # https://bugs.launchpad.net/poldek/+bug/1031767
+       if [ ! -s $t2 ]; then
+               local args=$*
+               echo 'ls -s' | script $t2 -f -c "poldek -q -Q --noignore ${args%-O*}" >/dev/null 2>&1
+
+               # now poll until poldek command runs in this tty
+               local stat lstat tty=$(tty < /proc/self/fd/2)
+               while :; do
+                       stat=$(stat -c %Y $t2)
+                       if [ -s $t2 ]; then
+                               # break if stat and last stat are same
+                               if [ "$stat" = "$lstat" ]; then
+                                       break
+                               fi
+                       fi
+                       lstat=$stat
+                       sleep 3
+               done
+               killall -v script 2>/dev/null
+               sed -i -e 's,poldek:/all-avail> ,,' $t2
+       fi
+
+       # create N-V-R -> N list
+       local pkg error message srpm
+       while read pkg; do
+               sed -rne "s/^($pkg)\.(x86_64|i686|noarch)(.+)-[^-]+-[^-]+\.src\.rpm$/\1\t\3/p" $t2
+       done < $t1 > $t3
+
+       while read error pkg message; do
+               # error: arcconf-7.0.18786-1: req libstdc++.so.5()(64bit) not found
+               srpm=$(awk -vpkg="${pkg%:}" '$1 == pkg {printf("%s.spec", $2)}' $t3)
+               echo "$error [$srpm] $pkg $message"
+       done < $t
+
+       rm -f $t $t1 $t2 $t3
+}
+
 gen_list() {
        date
        /usr/bin/poldek -O "auto directory dependencies = yes" \
@@ -35,11 +96,11 @@ gen_list() {
        --ignore "hal-libs" \
        --ignore "quicktime4linux*" \
        --ignore "compat-libstdc++-*" \
-       --verify=deps -Q "$@" | filter_deps | group_deps | sort
+       --verify=deps -Q "$@" | filter_deps | group_deps | sort | pkg2src "$@"
 }
 
 gen_list_uniq() {
-       gen_list -O "unique package names = yes" "$@"
+       gen_list "$@" -O"unique package names = yes"
 }
 
 t=$(mktemp)
This page took 0.138278 seconds and 4 git commands to generate.