#!/bin/bash

# Copyright 2007-2008 Anibal Monsalve Salazar <anibal@debian.org>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

. /etc/elida/elida.conf
. $FUNCTIONS

$LOGGER -p syslog.info $BASENAME: starting

makedirs

piupart_mirrors=
for mirror in $MIRRORS
do
    piupart_mirrors="-m $mirror $piupart_mirrors"
done

tmp=$(mktemp $TMP-XXXXXX)

if [ -n "$(ls $ELIDAHOME/inprogress)" ]
then
    mv $ELIDAHOME/inprogress/* $ELIDAHOME/ready
fi

while [ ! -f $ELIDAHOME/elida-stop ]
do
    for pdv in $(ls -1rt $ELIDAHOME/ready)
    do
        [ -f $ELIDAHOME/elida-stop ] && break

        log=$ELIDAHOME/apt-get_update.log
        apt-get update > $log 2>&1
        chmod 664 $log
        chown $USERNAME:$GROUPNAME $log
        dt=$(perl -e '$dt=time-(stat("'$ELIDAHOME/pbuilder_update_unstable.log'"))[9];print"$dt\n"')
        if [ $dt -gt 10800 ]
        then
            log=$ELIDAHOME/pbuilder_update_unstable.log
            pbuilder update unstable >> $log 2>&1
            chmod 664 $log
            chown $USERNAME:$GROUPNAME $log
        fi

        [ -f $ELIDAHOME/ready/$pdv ] || continue

        mv $ELIDAHOME/ready/$pdv $ELIDAHOME/inprogress/$pdv
        pkg=${pdv%_*}
        ver=${pdv#*_}
        . $ELIDAHOME/inprogress/$pdv
        makedir $ELIDAHOME/result/$pkg
        rm -f $ELIDAHOME/result/$pkg/*
        log=$ELIDAHOME/result/$pkg/${pdv}_$ARCH.result.log
        rm -f $ELIDAHOME/result/$pkg/*$ver*

        date -R > $log
        chmod 664 $log
        echo $(hostname; dpkg --print-architecture; dpkg -l elida lintian piuparts pbuilder | grep ^ii | awk '{print $2,$3}') >> $log
        echo >> $log
        pbuilder build --buildresult $ELIDAHOME/result/$pkg $ELIDAHOME/source/$pkg/$pdv.dsc 2>&1 | grep -v 'using uid of process' >> $log
        chmod 2775 $ELIDAHOME/result $ELIDAHOME/result/$pkg
        chmod 664 $ELIDAHOME/result/$pkg/*
        chown $USERNAME:$GROUPNAME $ELIDAHOME/result/$pkg/*

        if [ -e $ELIDAHOME/result/$pkg/${pdv}_$ARCH.changes ]
        then
            #rm -f $ELIDAHOME/public_html/debian/pool/$pkg
            #su - pbuilder -c "ln -s  ../../../result/$pkg $ELIDAHOME/public_html/debian/pool/$pkg; $ELIDAHOME/bin/pkgs"

            echo >> $log
            echo "$ELIDAHOME/result/$pkg/${pdv}_$ARCH.changes:" >> $log
            cat $ELIDAHOME/result/$pkg/${pdv}_$ARCH.changes >> $log

            for f in $ELIDAHOME/result/$pkg/*$ver*deb
            do
                echo >> $log
                echo "dpkg -I $f" >> $log
                dpkg -I $f >> $log 2>&1
            done

            for f in $ELIDAHOME/result/$pkg/*$ver*deb
            do
                echo >> $log
                echo "dpkg -c $f" >> $log
                dpkg -c $f >> $log 2>&1
            done

            for f in $ELIDAHOME/result/$pkg/*$ver*deb
            do
                echo >> $log
                echo "piuparts -p -N $piupart_mirrors $f" >> $log
                piuparts -p -N $piupart_mirrors $f >> $log 2>&1
            done

            echo >> $log
            echo "lintian -i --show-overrides $ELIDAHOME/result/$pkg/${pdv}_$ARCH.changes" >> $log
            su - $USERNAME -c "lintian -i --show-overrides $ELIDAHOME/result/$pkg/${pdv}_$ARCH.changes" >> $log 2>&1
        fi

        bzip2 -f -9 $log
        log="$log.bz2"

        rm -f $tmp
        mpack -s "Re: $subject" -o $tmp $log
        (echo -e "To: $from\nFrom: $FROM\nBcc: $BCC\nIn-Reply-To: $message_id\nUser-Agent: elida/$ELIDAVERSION"; cat $tmp) | $SENDMAIL -t

        mv $ELIDAHOME/inprogress/$pdv $ELIDAHOME/done/$pdv

        if [ -f $ELIDAHOME/elida-hup ]
        then
            rm -f $ELIDAHOME/elida-hup
            break
        fi
    done
    sleep 3
done

rm -f $ELIDAHOME/elida-stop

exit 0
