add initial revision of clean-nightly script
diff --git a/hudson-scripts/clean-nightly.sh b/hudson-scripts/clean-nightly.sh
new file mode 100755
index 0000000..199b525
--- /dev/null
+++ b/hudson-scripts/clean-nightly.sh
@@ -0,0 +1,132 @@
+#!/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
+# ====================================================================
+
+[ -z "${UPDATE_SITE__UNQUALIFIED_VERSION}" ] && {
+ echo "Execution aborted.
+
+One or more of the required variables is not set. They are normally
+provided by the Hudson build.
+
+ - UPDATE_SITE__UNQUALIFIED_VERSION: the unqualified version of the update site to publish.
+"
+ exit 1
+}
+
+source "$(dirname "${0}")/init.sh"
+
+NB_BUILDS_TO_KEEP=${NB_BUILDS_TO_KEEP:-"5"}
+
+CURRENT_PWD=$(pwd)
+
+STREAM="$(echo ${UPDATE_SITE__UNQUALIFIED_VERSION} | sed-regex 's/^([0-9]+\.[0-9]+)\.[0-9]+$/\1/').x"
+LSDEBUG "Stream name is '${STREAM}'"
+
+LSINFO "Clean up nightly builds (will keep the ${NB_BUILDS_TO_KEEP} most recent builds of stream ${STREAM}')"
+
+shopt -s nullglob
+
+cd ${UPDATE_NIGHTLY_HOME}
+ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX=( ${UPDATE_SITE__UNQUALIFIED_VERSION}* )
+cd ${CURRENT_PWD}
+
+if [ ${#ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} -eq 0 ]; then
+ LSINFO "No build found for stream '${STREAM}' in '${UPDATE_NIGHTLY_HOME}'"
+ exit 0
+fi
+
+if [ ${NB_BUILDS_TO_KEEP} -gt 0 ]; then
+ UPDATE_SITE_TO_KEEP=( $(echo ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} | tr ' ' '\n' | sort -r | head -n ${NB_BUILDS_TO_KEEP}) )
+ UNION=( ${UPDATE_SITE_TO_KEEP[@]} ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} )
+ UPDATE_SITES__TO_CLEAN=( $(echo ${UNION[@]} | tr ' ' '\n' | sort | uniq -u) )
+else
+ UPDATE_SITES__TO_CLEAN=( $(echo ${ALL_FOLDERS_WITH_UNQUALIFIED_VERSION_PREFIX[@]} | tr ' ' '\n' | sort) )
+fi
+
+if [ ${#UPDATE_SITES__TO_CLEAN[@]} -eq 0 ]; then
+ LSINFO "No build to clean for stream ${STREAM} (there are '${NB_BUILDS_TO_KEEP}' or less builds in this stream in '${UPDATE_NIGHTLY_HOME}'"
+else
+ LATEST_UPDATE_SITE__IN_STREAM=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -list) )
+ LSDEBUG "Current latest update site in stream '${STREAM}' is '${LATEST_UPDATE_SITE__IN_STREAM[@]}'"
+
+ LATEST_UPDATE_SITE__ALL_NIGHTLIES=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -list) )
+ LSDEBUG "Current latest update site is '${LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]}'"
+
+ for UPDATE_SITE__TO_CLEAN in ${UPDATE_SITES__TO_CLEAN[@]}
+ do
+ UPDATE_SITE_URL__TO_CLEAN="${UPDATE_NIGHTLY_URL}/${UPDATE_SITE__TO_CLEAN}"
+ LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/${STREAM}'"
+ composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
+
+ LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}'"
+ composite-repository -location "${UPDATE_NIGHTLY_HOME}" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
+
+ if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -gt 0 ]; then
+ if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -gt 1 ]; then
+ LSCRITICAL "There are more than a single update site referenced in the repository ${UPDATE_NIGHTLY_HOME}/${STREAM}/latest"
+ exit 1
+ elif [ "${UPDATE_SITE_URL__TO_CLEAN}" = "${LATEST_UPDATE_SITE__IN_STREAM[0]}" ]; then
+ LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/${STREAM}/latest'"
+ composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
+ fi
+ fi
+
+ if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -gt 0 ]; then
+ if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -gt 1 ]; then
+ LSCRITICAL "There are more than a single update site referenced in the repository ${UPDATE_NIGHTLY_HOME}/latest"
+ exit 1
+ elif [ "${UPDATE_SITE_URL__TO_CLEAN}" = "${LATEST_UPDATE_SITE__ALL_NIGHTLIES[0]}" ]; then
+ LSINFO "Removing '${UPDATE_SITE__TO_CLEAN}' from '${UPDATE_NIGHTLY_HOME}/latest'"
+ composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -remove "${UPDATE_SITE_URL__TO_CLEAN}"
+ fi
+ fi
+
+ LSINFO "Removing folder '${UPDATE_NIGHTLY_HOME}/${UPDATE_SITE__TO_CLEAN}'"
+ rm -rf "${UPDATE_NIGHTLY_HOME}/${UPDATE_SITE__TO_CLEAN}"
+ done
+
+ LATEST_UPDATE_SITE__IN_STREAM=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" -list) )
+ if [ ${#LATEST_UPDATE_SITE__IN_STREAM[@]} -eq 0 ]; then
+ cd ${UPDATE_NIGHTLY_HOME}
+ ALL_FILES_IN_STREAM=( $(echo "${UPDATE_SITE__UNQUALIFIED_VERSION}")* )
+ cd ${CURRENT_PWD}
+ if [ ${#ALL_FILES_IN_STREAM[@]} -gt 0 ]; then
+ LASTEST_UPDATE_SITE=$( echo ${ALL_FILES_IN_STREAM[@]} | tr ' ' '\n' | sort | tail -n 1 )
+ LSINFO "Redirecting '${UPDATE_NIGHTLY_HOME}/${STREAM}/latest' to '${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}"
+ createRedirect "${UPDATE_NIGHTLY_HOME}/${STREAM}/latest" "${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}" "${PROJECT_NAME} ${STREAM} latest nightly build"
+ else
+ LSINFO "There is no more builds in '${STREAM}', removing folder '${UPDATE_NIGHTLY_HOME}/${STREAM}'"
+ rm -rf "${UPDATE_NIGHTLY_HOME}/${STREAM}"
+ fi
+ else
+ LSDEBUG "After clean up, latest update site in stream '${STREAM}' is '${LATEST_UPDATE_SITE__IN_STREAM[@]}'"
+ fi
+
+ LATEST_UPDATE_SITE__ALL_NIGHTLIES=( $(composite-repository -location "${UPDATE_NIGHTLY_HOME}/latest" -list) )
+ if [ ${#LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]} -eq 0 ]; then
+ cd ${UPDATE_NIGHTLY_HOME}
+ ALL_FILES=( $(echo * | tr ' ' '\n' | grep -E '[0-9]+\.[0-9]+\.[0-9]+.*' || true) )
+ cd ${CURRENT_PWD}
+ if [ ${#ALL_FILES[@]} -gt 0 ]; then
+ LASTEST_UPDATE_SITE=$( echo ${ALL_FILES[@]} | tr ' ' '\n' | sort | tail -n 1 )
+ LSINFO "Redirecting '${UPDATE_NIGHTLY_HOME}/latest' to '${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}"
+ createRedirect "${UPDATE_NIGHTLY_HOME}/latest" "${UPDATE_NIGHTLY_URL}/${LASTEST_UPDATE_SITE}" "${PROJECT_NAME} latest nightly build"
+ else
+ LSINFO "There is no nightly builds in '${UPDATE_NIGHTLY_HOME}'"
+ LSDEBUG "Removing all files from '${UPDATE_NIGHTLY_HOME}'"
+ rm -rf "${UPDATE_NIGHTLY_HOME}/"*
+ fi
+ else
+ LSDEBUG "After clean up, latest update site confounded is '${LATEST_UPDATE_SITE__ALL_NIGHTLIES[@]}'"
+ fi
+fi
+
+shopt -u nullglob