blob: 098f1d89549ec0d45fa5bc3e8d5e4a4f4a214568 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-------------------------------------------------------------------------------
# This script downloads the latest sversion of org.apache.clerezza.integrationtest.web
# and org.apache.clerezza.integrationtest.web.performance
#-------------------------------------------------------------------------------
# Author: daniel.spicar@clerezza.org
#-------------------------------------------------------------------------------
# Requirements: curl, wget, bash
#-------------------------------------------------------------------------------
# error codes
NO_ERROR=0
DOWNLOAD_FAILED=1
BAD_ARGUMENTS=2
REQUIREMENTS_NOT_FULFILLED=3
NOT_DOWNLOADED=4
command_test=$(whatis "curl" | grep 'nothing appropriate')
if [ -n "$command_test" ]; then
echo "curl not found.";
exit $REQUIREMENTS_NOT_FULFILLED
fi
command_test=$(whatis "wget" | grep 'nothing appropriate')
if [ -n "$command_test" ]; then
echo "wget not found.";
exit $REQUIREMENTS_NOT_FULFILLED
fi
# global vars
BIN_URI_FRAMEWORK=http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.integrationtest.web/
BIN_URI_FRAMEWORK_RELEASE=`echo $BIN_URI_FRAMEWORK | sed 's/snapshot/release/'`
BIN_URI_PERFORMANCETEST=http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.integrationtest.web.performance/
BIN_URI_PERFORMANCETEST_RELEASE=`echo $BIN_URI_PERFORMANCETEST | sed 's/snapshot/release/'`
LIB_DIR=`pwd`
# Prints the usage message
print_usage()
{
echo "Usage: tx-getlatestframework [<output-directory> <framework-repo-uri> <performancetest-repo-uri>]"
}
# Checks whether the supplied file is present in LIB_DIR
# Args: file
check_file()
{
local file
if [ $# -eq 1 ]; then
file=$1
else
return $BAD_ARGUMENTS;
fi
if [ -e $LIB_DIR/$file ]; then
return 0
else
return 1
fi
}
# Downloads the specified binary. Requires exactly 3 arguments.
# Args: uri
# directory
# file
download_bin()
{
local uri
local dir
local file
if [ $# -eq 3 ]; then
uri=$1
dir=$2
file=$3
else
return $BAD_ARGUMENTS;
fi
if `check_file $file`; then
echo "the most recent file is $LIB_DIR/$file and it is already downloaded."
return $NOT_DOWNLOADED
else
if wget -O $LIB_DIR/$file $uri$dir$file ; then
return $NO_ERROR
fi
fi
return $DOWNLOAD_FAILED
}
# Checks if the first the first supplied version is higher than the second.
# Syntax: Versions are interpreted as follows: major_version.minor_version
# Example: to compare if 0.10 is larger than 0.9, the arguments are: 0 10 0 9
#
# NOTE: Same versions return true as well.
# This means the first argument is prioritized.
#
# Args: major_version_first
# minor_version_first
# major_version_second
# minor_version_second
is_higher_version()
{
if [ $# -ne 4 ]; then
return $BAD_ARGUMENTS
fi
if [ $1 -gt $3 ]; then
return 0
else
if [ $1 -eq $3 ]; then
if [ $2 -ge $4 ]; then
return 0
fi
fi
fi
return 1
}
# Get the latest binary.
# Args: uri
# uri_release
# Returns: An array with latest_uri latest_dir latest_file in that order.
get_latest_version()
{
if [ $# -ne 2 ]; then
return $BAD_ARGUMENTS
fi
local uri
local uri_release
local major_version_release
local minor_version_release
local major_version_snapshot
local minor_version_snapshot
local major_version
local minor_version
uri=$1
uri_release=$2
major_version_release=-1
minor_version_release=-1
for line in `curl $uri_release 2> /dev/null | sed 's/^.*\">//;s/<\/a.*$//;1,/Parent Directory/d;/^[^0-9]/,$d;'`; do
major_version=`echo $line | sed 's/\.[0-9]\+\///'`
minor_version=`echo $line | sed 's/\///;s/^[0-9]\+\.//'`
if `is_higher_version $major_version $minor_version $major_version_release $minor_version_release`; then
major_version_release=$major_version
minor_version_release=$minor_version
latest_dir_release=$line
fi
done
major_version_snapshot=-1
minor_version_snapshot=-1
for line in `curl $uri 2> /dev/null | sed 's/^.*\">//;s/<\/a.*$//;1,/Parent Directory/d;/^[^0-9]/,$d;'`; do
major_version=`echo $line | sed 's/\.[0-9]\+-SNAPSHOT\///'`
minor_version=`echo $line | sed 's/-SNAPSHOT\///;s/^[0-9]\+\.//'`
if `is_higher_version $major_version $minor_version $major_version_snapshot $minor_version_snapshot`; then
major_version_snapshot=$major_version
minor_version_snapshot=$minor_version
latest_dir=$line
fi
done
if `is_higher_version $major_version_release $minor_version_release $major_version_snapshot $minor_version_snapshot`; then
latest_dir=$latest_dir_release
uri=$uri_release
fi
for line in `curl $uri$latest_dir 2> /dev/null | sed '1,/<a href=\"o/d;/<hr>/,$d;/\.jar</!d;/sources/d;s/^ *<a href=\"//;s/\">.*$//'`; do
latest_file=$line
done
local ret
ret=( $uri $latest_dir $latest_file )
echo ${ret[@]}
}
# main script
# Argument handling
if [ $# -lt 4 ]; then
if [ $# -ge 1 ]; then
case $1 in
-*) print_usage; exit $NO_ERROR;;
*) LIB_DIR=$1;;
esac
fi
if [ $# -ge 2 ]; then
BIN_URI_FRAMEWORK=$2
BIN_URI_FRAMEWORK_RELEASE=`echo $BIN_URI_FRAMEWORK | sed 's/snapshot/release/'`
fi
if [ $# -eq 3 ]; then
BIN_URI_PERFORMANCETEST=$3
BIN_URI_PERFORMANCETEST_RELEASE=`echo $BIN_URI_PERFORMANCETEST | sed 's/snapshot/release/'`
fi
else
echo "Too many arguments!"
print_usage
exit $BAD_ARGUMETNS
fi
latest_version=( `get_latest_version $BIN_URI_FRAMEWORK $BIN_URI_FRAMEWORK_RELEASE` )
echo ${latest_version[@]}
download_bin ${latest_version[@]}
latest_version=( `get_latest_version $BIN_URI_PERFORMANCETEST $BIN_URI_PERFORMANCETEST_RELEASE` )
download_bin ${latest_version[@]}
exit $?