#!/bin/sh
set +e # its okay to fail in these script, most of the time the apt* stuff will generate errors

if [ -z "$1" -o -z "$2" ]; then
	echo "Usage: $0 file codename pkg…"
	exit 1
fi

CHECK_ARGS='no'
TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
find_project_binary_dir
BUILDDIRECTORY="${APT_INTEGRATION_TESTS_BUILD_DIR:-"${PROJECT_BINARY_DIR}/cmdline"}"

GENERATE="$1"
CODENAME="$2"
shift 2

WORKDIR="$(mktemp -d)"
cleanupworkdir() {
	if [ -z "$WORKDIR" ]; then return; fi
	rm -rf "$WORKDIR"
}
trap "cleanupworkdir;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
touch "$WORKDIR/status"
TMPGEN="$WORKDIR/Packages"
export LANG=C.UTF-8

aptgetinstall() {
	aptget install "$@" --no-install-recommends -t "$CODENAME" -s \
		-o Dir::state::status="$WORKDIR/status" \
		-o Dir::Cache="$WORKDIR" \
		-o pkgCacheGen::Essential=none \
		-o APT::Immediate-Configure=0
}
LISTOFPKGS="$(aptgetinstall "$@" 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#")"
if [ -z "$LISTOFPKGS" ]; then
	echo "List of packages is empty: run apt-get install command again for you now"
	aptgetinstall
	exit 1
fi
aptcache show $LISTOFPKGS --no-all-versions 2> "$WORKDIR/error.lst" | sed -e '/^ / d' \
	-e '/^SHA1: / d' -e '/^SHA256: / d' \
	-e '/^Homepage: / d' -e '/^Tag: / d' \
	-e '/^Xul-Appid: / d' \
	-e '/^Status: / d' \
	-e 's/^Description-en:/Description:/' \
	> "$TMPGEN"

if [ "$CODENAME" = "experimental" ]; then
	aptcache show $(cut -d"'" -f 4 "$WORKDIR/error.lst" | sed -e 's#$#/sid#') --no-all-versions 2> /dev/null >> "$TMPGEN"
fi

if echo "$GENERATE" | grep '^status-' > /dev/null; then
	sed -i "$TMPGEN" -e '/^Package: / a\
Status: install ok installed' \
		-e '/^Filename: / d' -e '/^Size: / d' -e '/^MD5sum: / d'
fi

apt-sortpkgs "$TMPGEN" > "$GENERATE"