#!/usr/bin/env bash
set -e

# This script updates the apt repo in $DOCKER_RELEASE_DIR/apt/repo.
# This script is a "fix all" for any sort of problems that might have occurred with
# the Release or Package files in the repo.
# It should only be used in the rare case of extreme emergencies to regenerate
# Release and Package files for the apt repo.
#
# NOTE: Always be sure to re-sign the repo with hack/make/sign-repos after running
# this script.

: ${DOCKER_RELEASE_DIR:=$DEST}
APTDIR=$DOCKER_RELEASE_DIR/apt/repo

# supported arches/sections
arches=( amd64 i386 )

# Preserve existing components but don't add any non-existing ones
for component in main testing experimental ; do
	if ls "$APTDIR/dists/*/$component" >/dev/null 2>&1 ; then
		components+=( $component )
	fi
done

dists=( $(find "${APTDIR}/dists" -maxdepth 1 -mindepth 1 -type d) )

# override component if it is set
if [ "$COMPONENT" ]; then
	components=( $COMPONENT )
fi

# release the debs
for version in "${dists[@]}"; do
	for component in "${components[@]}"; do
		codename="${version//debootstrap-}"

		# update the filelist for this codename/component
		find "$APTDIR/pool/$component" \
			-name *~${codename#*-}*.deb > "$APTDIR/dists/$codename/$component/filelist"
	done
done

# run the apt-ftparchive commands so we can have pinning
apt-ftparchive generate "$APTDIR/conf/apt-ftparchive.conf"

for dist in "${dists[@]}"; do
	version=$(basename "$dist")
	for component in "${components[@]}"; do
		codename="${version//debootstrap-}"

		apt-ftparchive \
			-o "APT::FTPArchive::Release::Codename=$codename" \
			-o "APT::FTPArchive::Release::Suite=$codename" \
			-c "$APTDIR/conf/docker-engine-release.conf" \
			release \
			"$APTDIR/dists/$codename" > "$APTDIR/dists/$codename/Release"

		for arch in "${arches[@]}"; do
			apt-ftparchive \
				-o "APT::FTPArchive::Release::Codename=$codename" \
				-o "APT::FTPArchive::Release::Suite=$codename" \
				-o "APT::FTPArchive::Release::Component=$component" \
				-o "APT::FTPArchive::Release::Architecture=$arch" \
				-c "$APTDIR/conf/docker-engine-release.conf" \
				release \
				"$APTDIR/dists/$codename/$component/binary-$arch" > "$APTDIR/dists/$codename/$component/binary-$arch/Release"
		done
	done
done