#!/bin/bash

#*******************************************************************************
# Copyright (c) 2011 IBM Corporation and others.
# 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:
#     IBM Corporation - initial API and implementation
#*******************************************************************************

baseBuilder=/shared/eclipse/e4/build/e4/org.eclipse.releng.basebuilder
launcherJar=$( find $baseBuilder/ -name "org.eclipse.equinox.launcher_*.jar" | sort | head -1 )
java=/shared/common/jdk-1.5.0-22.x86_64/jre/bin/java

remoteBase=/home/data/httpd/download.eclipse.org

e4Builds=/shared/eclipse/e4/build/e4/downloads/drops/4.0.0
e4Drops=$remoteBase/e4/downloads/drops

sdkBuilds=/shared/eclipse/e4/build/e4/downloads/drops/4.0.0/40builds
sdkDrops=$remoteBase/eclipse/downloads/drops4

orionBuilds=/shared/eclipse/e4/orion

generateCleanupXML() {
	dash=""
	if [ ! -z "$1" ]; then
		dash=$1
	fi

        cat > cleanupScript.xml << "EOF"
<project>
        <target name="cleanup">
                <p2.composite.repository destination="file:${compositeRepo}">
			<remove>
EOF
        for f in $builds; do 
		d=${f:0:9}
                t=${f:9}
		echo "				<repository location=\"$d$dash$t\" />" >> cleanupScript.xml
        done
cat >> cleanupScript.xml << "EOF"
			</remove>
                </p2.composite.repository>
        </target>
</project>
EOF

}

clean() {
	project=$1
	prefix=$2
	compositeRepo=$3

	user=pwebster
	case "$project" in
		"e4")
			buildDir=$e4Builds
			p2RepoRoot=e4/updates
			urlFragment=e4/downloads;;
		"sdk") 
			buildDir=$sdkBuilds
			p2RepoRoot=eclipse/updates
			urlFragment=e4/sdk;;
		"orion")
			buildDir=$orionBuilds
			user=aniefer
			p2RepoRoot=orion/updates
			urlFragment=orion;;
	esac

        pushd $buildDir

        builds=$( ls --format=single-column -d $prefix* | sort | head -n-3 )

	if [[ ! -z $builds ]]; then
		#remove from p2 composite repository
		generateCleanupXML
		$java -jar $launcherJar -application org.eclipse.ant.core.antRunner -f cleanupScript.xml cleanup -DcompositeRepo=$compositeRepo

		for f in $builds; do
			rm -rf $f						#delete from build directory
			ssh $user@dev.eclipse.org rm -rf $remoteBase/$urlFragment/drops/$f		#delete from dev.eclipse.org drops
			rm -rf $compositeRepo/$f				#delete from composite repo

			case "$project" in
			"e4")
				rm -rf targets/$f targets/$f-p2;;
			"sdk")
				rm -rf /shared/eclipse/e4/sdk/$f $sdkBuilds/targets/helios-repo-$f;;
			"orion")
				d=${f:0:9}
				t=${f:9}
				rm -rf tests/$d-$t $compositeRepo/$d-$t;;
			esac
		done

		#update website index and rsync the repo
		wget -O index.txt http://download.eclipse.org/$urlFragment/createIndex.php
		scp index.txt $user@dev.eclipse.org:$remoteBase/$urlFragment/index.html
		rm index.txt
		rsync --delete --recursive $compositeRepo $user@dev.eclipse.org:$remoteBase/$p2RepoRoot
	fi
	popd
}

clean e4    I $e4Builds/targets/updates/0.12-I-builds
clean e4    M $e4Builds/targets/updates/0.11-I-builds
clean sdk   I $e4Builds/targets/updates/4.2-I-builds
clean sdk   M $e4Builds/targets/updates/4.1-I-builds
clean orion I $orionBuilds/target/0.3-I-builds

