From cef29ec5f674c698981966a692c1a4662c73461c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Elan=20Ruusam=C3=A4e?= Date: Wed, 1 Aug 2012 15:28:34 +0000 Subject: [PATCH] show src.rpm package name in reports; very hackish due poldek bugs/missing features Changed files: wwwbin/consistency-check.sh -> 1.3 --- wwwbin/consistency-check.sh | 65 +++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/wwwbin/consistency-check.sh b/wwwbin/consistency-check.sh index 9a20900..5e12c2e 100644 --- a/wwwbin/consistency-check.sh +++ b/wwwbin/consistency-check.sh @@ -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) -- 2.44.0