#!/bin/sh
# ====================================================================
# Copyright (c) 2014 Obeo
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#    Obeo - initial API and implementation
# ====================================================================

P2_ADMIN_VERSION="${P2_ADMIN_VERSION:-1.1.0}"

_initP2Admin() {
	LSDEBUG "Initializing p2-admin ${P2_ADMIN_VERSION}"

	local wd="${1}"

	local osws=""
	local archiveFileExtension=""
	if [[ "${OSTYPE}" == "linux"* || "${OSTYPE}" == "freebsd"* ]]; then
		osws="linux.gtk"
		archiveFileExtension="tar.gz"
	elif [[ "${OSTYPE}" == "cygwin"* ]]; then
		osws="win32.win32"
		archiveFileExtension="zip"
	elif [[ "${OSTYPE}" == "darwin"* ]]; then
		osws="macosx.cocoa"
		archiveFileExtension="tar.gz"
	else
		LSCRITICAL "Unknown 'OSTYPE'=${OSTYPE}."
		exit -1
	fi

	local arch=""
	if [[ $(uname -m) == *"64"* ]]; then
		arch="x86_64"
	else
		arch="x86"
	fi

	local platformSpecifier="${osws}.${arch}"
	local p2AdminArchive="p2-admin-${P2_ADMIN_VERSION}-${platformSpecifier}.${archiveFileExtension}"
	local p2AdminURL="https://github.com/mbarbero/p2-admin/releases/download/v${P2_ADMIN_VERSION}/${p2AdminArchive}"

	# prevents re-downloading the p2-admin archive each time.
	if [ ! -f "${wd}/${p2AdminArchive}" ]; then
		LSDEBUG "Downloading p2-admin '${p2AdminURL}'"
		wget -q --no-check-certificate ${p2AdminURL} -O - > "${wd}/${p2AdminArchive}"
	fi

	# this way, we are sure to have a clean p2-admin install, without any p2-cache.
	# the p2-admin archive will be unzipped afterwards.
	if [ -d '${wd}/p2-admin' ]; then
		rm -rf "${wd}/p2-admin"
	fi

	tar zxf "${wd}/${p2AdminArchive}" -C "${wd}"
}

compositeRepository() {
	if [ ! -f "${WORKING_DIRECTORY}/p2-admin/p2-admin" ]; then
		_initP2Admin "${WORKING_DIRECTORY}"
	fi

	"${WORKING_DIRECTORY}/p2-admin/p2-admin" \
		-vm "${JAVA_HOME}/bin/java" \
		-application "org.eclipselabs.equinox.p2.composite.repository" \
		$@ || true
}

# Create a p2 index file for composite repositories
createP2Index() {
	if [ ! -f "${1}/p2.index" ]; then
		cat > "${1}/p2.index" <<EOF
version = 1
metadata.repository.factory.order = compositeContent.xml,\!
artifact.repository.factory.order = compositeArtifacts.xml,\!
EOF
	fi
}

# Remove any previous file from the ${1} path and create a composite repository with a single
# child (${2}). The composite will be name ${3}.
createRedirect() {
	local from="${1}"
	local to="${2}"
	local name="${3}"

	if [ ! -f "${WORKING_DIRECTORY}/p2-admin/p2-admin" ]; then
		_initP2Admin "${WORKING_DIRECTORY}"
	fi
	
	mkdir -p "${from}"
	rm -f "${from}/compositeArtifacts."*
	rm -f "${from}/compositeContent."*
	compositeRepository -location "${from}" -add "${to}" -repositoryName "${name}" -compressed
	createP2Index ${from}
}
