#!/bin/sh
#
# This script runs dbuild on a Debian source mirror and makes the failed
# build logs available on the web.
#
# Lars Wirzenius <liw@iki.fi>

set -e

[ -z "$DBUILD" ] && DBUILD="dbuild -V -v -a -s"

echo "Running $DBUILD..."
$DBUILD "$@"
rm -f OK/*.deb

echo "Building logs..."
rm -rf logs-failed
mkdir logs-failed
for dir in FAILED IGNORED
do
	if ls $dir | grep messages > /dev/null
	then
		ln $dir/*.messages logs-failed
	fi
	if ls $dir | grep '\.note$' > /dev/null
	then
		ln $dir/*.note logs-failed
	fi
done

nfailed=`ls logs-failed | wc -l`
nok=`ls OK | wc -l`

for dir in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
	if ls logs-failed | grep "^$dir.*messages\$" >/dev/null
	then
		mkdir -p logs-failed/$dir
		mv logs-failed/$dir*.messages logs-failed/$dir
	fi
	if ls logs-failed | grep "^$dir.*note\$" >/dev/null
	then
		mkdir -p logs-failed/$dir
		mv logs-failed/$dir*.note logs-failed/$dir
	fi
done
if ls logs-failed | grep messages > /dev/null
then
	mkdir -p logs-failed/Other
	mv logs-failed/*.messages logs-failed/Other
fi
if ls logs-failed | grep note > /dev/null
then
	mkdir -p logs-failed/Other
	mv logs-failed/*.note logs-failed/Other
fi

dirs_html=""
for dir in `cd logs-failed; echo */`
do
	dir=`echo $dir | tr -d /`
	if [ ! -z "$dirs_html" ]
	then
		dirs_html="$dirs_html, "
	fi
	dirs_html="$dirs_html <a href=\"$dir/index.html\">$dir</a>"
done
dirs_html="$dirs_html."

dpkg --list > logs-failed/packages-installed.txt
sed "s#DIRSHTML#$dirs_html#;s#DATE#`date -R`#;s#NFAILED#$nfailed#;s#NOK#$nok#;s#ARCH#`dpkg --print-architecture`#g" /usr/lib/dbuild/index.html > logs-failed/index.html
chmod -R go=u,go-w logs-failed

for dir in logs-failed/*/
do
	out=$dir/index.html
	rm -f $out
	echo "<html><head><title>dbuild failed logs</title></head>" >>$out
	echo "<body><h1>Packages beginning with `basename $dir`</h1>" >>$out
	echo "<ul>" >>$out
	for file in $dir/*.messages
	do
		base=`basename $file .messages`
		note=$dir/$base.note
		pkg=`echo $base | sed 's/_.*//'`
		ver=`echo $base | sed 's/.*_//'`
		echo "<li><a href=\"$base.messages\">$pkg</a> $ver" >>$out
		if [ -e $note ]
		then
			echo "<blockquote><pre>" >>$out
			sed 's/^/    /' $note >> $out
			echo "</pre></blockquote>" >>$out
		fi
	done
	echo "</ul></body></html>" >>$out
done

if [ -r Maintainers ]
then
	find logs-failed/*/ -name '*.messages' | sed 's:.*/::;s:_.*::' |
	/usr/lib/dbuild/sort-maintainers Maintainers > logs-failed/by-maintainer.txt
else
	echo "No Maintainers file found, sorry." > logs-failed/by-maintainer.txt
fi

# echo "Publishing logs..."
# ssh eros rm -rf public_html/debian/dbuild-logs
# scp -r logs-failed eros:public_html/debian/dbuild-logs

echo "Done."
