#!/bin/sh

##
## This is the official eclipse.org mirror site script.
##
## Set your options and run once manually, then as a cronjob - preferably not as root
##
## Last updated: 2012-07-10 by Denis Roy (webmaster@eclipse.org)
##


##
## User-defined options

# Set the base path for your mirror site here
# No ending /
mirror_path="/path/to/mirror"

# path to your RSYNC binary
RSYNC=/usr/bin/rsync

# Lockfile location - prevents rsync script from re-spawning
LOCKFILE="/tmp/eclipse_lockfile"

# if you rsync from master server, use these options
RSYNC_HOST=download.eclipse.org
RSYNC_PATH=eclipseMirror

# Alternate RSYNC.  Comment the master server options above
# RSYNC_HOST=rsync.gtlib.gatech.edu
# RSYNC_PATH=eclipse

# Alternate RSYNC.  Comment the master server options above
# RSYNC_HOST=rsync.osuosl.org
# RSYNC_PATH=eclipse




# Select the content you want to mirror.
# Please see http://eclipse.org/downloads for information on the space requirements.

# full_eclipse is a complete eclipse.org mirror, without nightly builds.  This is what most people want.
# If you set this to no, set the projects you want to yes below.
full_eclipse=yes


# full_patform is the Eclipse Platform project.
# It includes Stable and Release builds, but not nightlies.
# It does not include any other project (Release trains, tools, webtools, technology, birt, etc)
full_platform=no

# All Simultaneous Releases. This will be a high-demand item. Say no here if you said yes to full_eclipse.
release_trains=no

# BIRT project. Say no here if you said yes to full_eclipse.
full_birt=no

# modeling Project. Say no here if you said yes to full_eclipse.
full_modeling=no

# RT Project. Say no here if you said yes to full_eclipse.
full_rt=no

# technology Project. Say no here if you said yes to full_eclipse.
full_technology=no

# Tools project. Say no here if you said yes to full_eclipse.
full_tools=no

# Testing and Performance Tools Project (TPTP). Say no here if you said yes to full_eclipse.
full_tptp=no

# Webtools project. Say no here if you said yes to full_eclipse.
full_webtools=no

# Datatools project. Say no here if you said yes to full_eclipse.
full_datatools=no

## End: User-defined options
##



#
## Contributed by Gabriel Akos 2005-10-14
host $RSYNC_HOST > /dev/null
hres=$?
if [ $hres -ne 0 ]; then
	echo "Eclipse mirror - host $RSYNC_HOST resolution failed" >/dev/stderr
	exit 1
fi


if [ -e $LOCKFILE ]; then
	echo "Eclipse mirror - Lockfile $LOCKFILE exists" >/dev/stderr
	exit 1
fi
touch $LOCKFILE

## END: Contributed by Gabriel Akos 2005-10-14
#



# required "mirror root" timestamp.
# All mirror sites must get this.
$RSYNC -tlvp $RSYNC_HOST::$RSYNC_PATH/TIME $mirror_path 


if [ $full_eclipse == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/* $mirror_path
fi 

if [ $full_platform == yes ] ; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/eclipse/* $mirror_path/eclipse/
fi

if [ $release_trains == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/releases/* $mirror_path/releases/
fi


if [ $full_birt == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/birt/* $mirror_path/birt/
fi

if [ $full_modeling == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/modeling/* $mirror_path/modeling/
fi

if [ $full_rt == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/rt/* $mirror_path/rt/
fi

if [ $full_technology == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/technology/* $mirror_path/technology/
fi

if [ $full_tools == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/tools/* $mirror_path/tools/
fi

if [ $full_tptp == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/tptp/* $mirror_path/tptp/
fi

if [ $full_webtools == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/webtools/* $mirror_path/webtools/
fi

if [ $full_datatools == yes ]; then
	$RSYNC -rtlvp --delete $RSYNC_HOST::$RSYNC_PATH/datatools/* $mirror_path/datatools/
fi

# required "mirror root" timestamp.
# All mirror sites must get this.
$RSYNC -tlvp $RSYNC_HOST::$RSYNC_PATH/ztime/* $mirror_path/ztime/


rm $LOCKFILE