#!/bin/bash

#set -e
shopt -s nullglob

umask 0002

GPG=$(realpath $(dirname $0)/gpg)
CONFFILE=`dirname $0`/../etc/debian-arege.conf
OVERRIDE=$(realpath $(dirname $0)/../etc/override)
KEYID=""
test -f $CONFFILE && . $CONFFILE

if [ -z "$KEYID" ]; then
    echo "Please set KEYID to config file ($CONFFILE)" >&2
    exit 255
fi

targetdir=$1

compress () {
    gzip -k -9 -f "$1"
    xz -k -f "$1"
}

sign () {
    rm -f "${1}.gpg"
    $GPG --default-key "$KEYID" -abs -o "${1}.gpg" "$1"
}

make_packages_sources () {
    dir=$1
    for binary in ${dir}/binary-*; do
        if [ "$(basename $binary)" != "binary-all" ]; then
	    echo -n "Generating $binary/Packages:"
	    rm -f $binary/Packages
	    apt-ftparchive packages $binary $OVERRIDE > $binary/Packages
	    compress $binary/Packages
	    echo " done."
	fi
    done
    if [ -d $dir/source ]; then
	rm -f $dir/source/Sources
	apt-ftparchive sources $dir $OVERRIDE > $dir/source/Sources
	compress $dir/source/Sources
    fi
    echo -n "Generating $dir/Release:"
    rm -f $dir/Release
    apt-ftparchive release $dir > $dir/Release
    compress $dir/Release
    sign $dir/Release
    echo " done."
}

cd $BASEDIR

dists=`find dists/* -maxdepth 0 -type d`

if [ -z "$targetdir" ]; then
    for dist in $dists; do
        for package in $dist/*; do
	    test "${package##*/}" == "ALL" && continue
	    test -d "${package#}" || continue
	    make_packages_sources $package
        done
    done
else 
    if [ ! -e "$targetdir" ]; then
	echo "$targetdir: No such file or directory" 1>&2
	exit 1
    elif [ ! -d "$targetdir" ]; then
	echo "$targetdir: Not a directory" 1>&2
	exit 1
    fi
    make_packages_sources $targetdir
fi

for dist in $dists; do
    for arch in $dist/ALL/binary-*; do
	echo -n "Generating ${arch}/Packages:"
        rm -f ${arch}/Packages{,.gz,.xz}
        find ${dist} -path \*/$(basename $arch)/Packages -print | xargs cat > ${arch}/Packages.new && \
		mv ${arch}/Packages.new ${arch}/Packages
	compress ${arch}/Packages
	echo " done."
    done
    echo -n "Generating ${dist}/ALL/source/Sources:"
    rm -f ${dist}/ALL/source/Sources{,.gz,.xz}
    find ${dist} -path \*/Sources -print | xargs cat > ${dist}/ALL/source/Sources.new && \
    	mv ${dist}/ALL/source/Sources.new ${dist}/ALL/source/Sources
    compress ${dist}/ALL/source/Sources
    echo " done."

    echo -n "Generating ${dist}/ALL/Release:"
    rm -f $dist/ALL/Release
    apt-ftparchive release $dist/ALL > $dist/ALL/Release
    compress $dist/ALL/Release
    sign $dist/ALL/Release
    echo " done."

    echo -n "Generating ${dist}/Release:"
    rm -f $dist/Release
    apt-ftparchive release -o APT::FTPArchive::Release::Origin=arege -o APT::FTPArchive::Release::Codename=${dist##*/} $dist > $dist/Release
    compress $dist/Release
    sign $dist/Release
    echo " done."
done
