#!/bin/sh
#Move the generated p2 repository to its location on download.eclipse.org/jetty/updates
pwd

#export platform (indigo-milestone, indigo-milestone-dev, indigo-nightly)
#export rt_release_version

[ -z "$deploymentdir_parent" ] && deploymentdir_parent="/home/data/httpd/download.eclipse.org/jetty/updates"
if [ "$platform" = "indigo-milestone" ]; then
  deploymentdir_name="jetty-rt-3.7milestones"
elif [ "$platform" = "indigo-milestone-dev" -o "$platform" = "indigo-nightly" ]; then
  deploymentdir_name="jetty-rt-3.7-N-builds"
else
  echo "Unknown platform $platform"
  exit 12
fi
deploymentdir="$deploymentdir_parent/$deploymentdir_name"
if [ ! -d "$deploymentdir" ]; then
  echo "Unable to find the deployment directory $deploymentdir"
  exit 12
fi

builtrepodir="jetty-features/org.eclipse.jetty.product/target/repository"
if [ ! -d "$builtrepodir/plugins/" ]; then
  echo "Unable to find the built repository directory $builtrepodir"
  exit 12
fi
jetty_util=`find $builtrepodir/plugins/org.eclipse.jetty.util_*.jar`
if [ -z "$jetty_util" ]; then
  echo "Unable to locate 'org.eclipse.jetty.util_*.jar' the repository was not built correctly."
  exit 12;
fi
jetty_version_built=`echo "$jetty_util" | sed -nr 's/.*util_(.*)(\.jar)/\1/p'`
echo "version built $jetty_version_built"

jetty_version_used=$jetty_version_built
if [ -z "$rt_release_version" ]; then
  echo "SNAPSHOT build: deploy in the 'development' folder."
  jetty_version_built="development"
else
  #Compute the qualifier using a feature and append it to the rt_release_version:
  #so S-3.7-RC4 becomes S-3.7-RC4-201105301339 for example
  jetty_core=`find $builtrepodir/features/org.eclipse.jetty.core_*.jar`
  if [ -z "$jetty_core" ]; then
    echo "Unable to locate 'features/org.eclipse.jetty.core_*.jarfeatures/org.eclipse.jetty.core_*.jar' the repository was not built correctly."
    exit 12;
  fi
  jetty_core_qualifier=`echo "$jetty_core" | sed -nr 's/.*core_.*\.(.*)(\.jar)/\1/p'`
  echo "The qualifier of the features built here: $jetty_core_qualifier"
  jetty_version_built="$rt_release_version-$jetty_core_qualifier"
fi


#echo "Place the product archives inside the repository"
#A product archive looks like this: EclipseRTWebStarterKit-3.7.0.201105292308-linux.gtk.x86.tar.gz
#product_file=`find jetty-features/org.eclipse.jetty.product/target/EclipseRTWebStarterKit-*-linux.gtk.x86.tar.gz`
#if [ -z "$product_file" ]; then
#  echo "Unable to locate 'EclipseRTWebStarterKit-*-linux.gtk.x86.tar.gz' there was no product archive."
#  exit 12;
#fi
#product_version_built=`echo "$product_file" | sed -nr 's/.*EclipseRTWebStarterKit-(.*)(-linux\.gtk\.x86\.tar\.gz)/\1/p'`
#echo "product built $product_file"
#echo "version built $product_version_built"
#Also copy the windows version to get a zip arcchive:
#product_file_win32=`find jetty-features/org.eclipse.jetty.product/target/EclipseRTWebStarterKit-*-win32.win32.x86.zip`
#if [ -z "$product_file_win32" ]; then
#  echo "Unable to locate 'EclipseRTWebStarterKit-*-win32.win32.x86.zip' there was no product archive."
#  exit 12;
#fi

#product_file_name="EclipseRTWebStarterKit-"$product_version_built".tar.gz"
#product_file_zip_name="EclipseRTWebStarterKit-"$product_version_built".zip"
#repository_archive_file_name="EclipseRTWebStarterKit-repository-"$product_version_built".zip"
#curr_dir=`pwd`
#cd jetty-features/org.eclipse.jetty.product/target
#[ -d "$repository_archive_file_name" ] && rm "$repository_archive_file_name"
#zip -r "$repository_archive_file_name" repository
#cd $curr_dir

#mv jetty-features/org.eclipse.jetty.product/target/$repository_archive_file_name $builtrepodir/
#cp $product_file $builtrepodir/$product_file_name
#cp $product_file_win32 $builtrepodir/$product_file_zip_name


echo "Generating the index.html"
#For the synthax of the html template see http://stackoverflow.com/questions/1609423/using-sed-to-expand-environment-variables-inside-files

deploymentdir_absolute_href="/jetty/updates/$deploymentdir_name/$jetty_version_built"
software_site_url=http://download.eclipse.org${deploymentdir_absolute_href}
product_file_href="http://www.eclipse.org/downloads/download.php?file=$deploymentdir_absolute_href/$product_file_name"
product_file_zip_href="http://www.eclipse.org/downloads/download.php?file=$deploymentdir_absolute_href/$product_file_zip_name"
repository_archive_file_href="http://www.eclipse.org/downloads/download.php?file=$deploymentdir_absolute_href/$repository_archive_file_name"
timestamp=`date`
export software_site_url deploymentdir_absolute_href repository_archive_file_name repository_archive_file_href product_file_href product_file_zip_href product_version_built product_file_name product_file_zip_name jetty_version_used platform timestamp
env | sed 's/[\%]/\\&/g;s/\([^=]*\)=\(.*\)/s%${\1}%\2%/;/^s/!d' > sed.script
cat index-tpl.html | sed -f sed.script > $builtrepodir/index.html

if [ -d "$deploymentdir/$jetty_version_built" ]; then
  rm -rf $deploymentdir/$jetty_version_built
fi
mkdir -p $deploymentdir/$jetty_version_built

echo "Deploying the generated p2 repository in $deploymentdir/$jetty_version_built"
cp -r $builtrepodir/* $deploymentdir/$jetty_version_built
#Make sure that the rt.jetty group of users can tweak things eventually. Ignore errors.
set +e
chmod -R g+rw $deploymentdir/$jetty_version_built
set -e

#Re-generate the composite repository
[ -f "$deploymentdir/index.sh" ] && $deploymentdir/index.sh



