1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#! /bin/bash
set -e
verbose="-q"
screen=""
web=""
test=""
target=""
while true; do
case "$1" in
"") break ;;
-s) screen=1 ;;
-t) shift; test=$1 ;;
-v) verbose="-v -v -v -v" ;;
-w) web=1 ;;
-*)
echo "Error: unrecognized argument '$1'"
exit 1
;;
*)
if [ -z "$target" ]; then
target=$1
else
echo "Error: invalid number of arguments"
exit 1
fi
;;
esac
shift
done
if [ -z "$screen" ]; then
if [ -z "$target" ]; then
echo "Error: target directory not specified"
exit 1
fi
mkdir -p $target
if [ "$web" ]; then
mkdir -p $target/thumbs
else
arch=$(dpkg --print-architecture)
dist=$(apt-cache policy | \
sed -r "/^ [0-9]+ /N; s/^ ([0-9]+) .*a=([^,]*).*/\1 \2/" | \
grep "^[0-9]" | sort -nru | head -n1 | awk '{print $2}')
if [ -z "$test" ]; then
echo "Testset generated $(date -uR) on $arch/$dist" >$target/README
fi
fi
fi
gen_set() {
count=1
for opt in "--no-versions --no-alternatives --no-recommends" \
"--no-versions --no-alternatives" \
"--no-versions --no-alternatives --with-suggests" \
"--no-versions" \
"" \
"--with-suggests" \
"--with-suggests --versioned-conflicts" \
"--rotate"
do
echo $1$count $1 $opt
count=$(($count + 1))
done
}
testset="dpkg dpkg
$(gen_set debconf)
$(gen_set aptitude)
usage1 dpkg -b --arch=all --no-recommends --no-conflicts
usage2 clamav -I -S
usage3.1 pidentd --max-providers=5
usage3.2 pidentd -I
usage4 apt -I --rdeps-depth=3"
if [ -z "$web" ]; then
testset="$testset
test1 tcpd --no-conflicts -I --rdeps-depth=2 --max-rdeps=3
test2 libcairo2 --no-conflicts -I --rdeps-depth=20
test3 debian-installer -b --arch=armel --no-recommends --no-conflicts
test4 whiptail -R"
fi
echo "$testset" | while read outfile package opts; do
if [ "$test" ] && [ $outfile != $test ]; then
continue
fi
echo "Generating $outfile: $opts $package" >&2
if [ "$screen" ]; then
./debtree $verbose $opts $package | dot -Tps | kghostview - &
sleep 10
else
./debtree $verbose $opts $package >$target/$outfile.dot
if [ "$web" ]; then
for format in ps png svg; do
dot -T$format -o "$target/$outfile.$format" \
$target/$outfile.dot
done
# Generate thumbnail; from SVG gives best quality
convert $target/$outfile.svg -thumbnail 400 \
$target/thumbs/$outfile.png
# For dpkg we only need the thumbnail
rm -f $target/dpkg.*
# The following files are not wanted for the website
# because of size restraints
rm -f $target/aptitude[5678].png
rm -f $target/debconf[678].png
rm -f $target/usage[124].png
rm -f $target/usage3.[12].png
fi
fi
done
# Also generate the comparison graphs from apt-cache
if [ "$web" ]; then
for package in debconf aptitude; do
outfile=${package}0
apt-cache dotty $package >$target/$outfile.dot
for format in ps png svg; do
dot -T$format -o "$target/$outfile.$format" \
$target/$outfile.dot
done
# Generate thumbnail; from SVG gives best quality
convert $target/$outfile.svg -thumbnail 400 \
$target/thumbs/$outfile.png
done
fi
|