Files
sdkman-cli/srv/scripts/gvm
Peter Ledbrook 50fa2ee21d Add 'version' command.
It was frustrating to see the gvm version every time I ran a command, so I
have removed the relevant echo and moved it into a separate 'version' command.

I also decided to change the logic for determining whether the given command
is valid or not. The original check was already unwieldy and getting more so,
so the script now checks the given command against all the functions starting
with 'gvm-<cmd>'. If the function exists, so does the command.
2012-10-22 11:20:14 +01:00

275 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
GVM_VERSION="0.8"
PLATFORM=$(uname)
#
# function definitions
#
function help {
CANDIDATES=$(curl -s "$GVM_SERVICE/candidates")
echo ""
echo "Usage: gvm <command> <candidate> [version]"
echo ""
echo " command : install, uninstall, list, use, current, version, selfupdate or help"
echo " candidate : $CANDIDATES"
echo " version : optional, defaults to latest stable if not provided"
echo ""
echo "eg: gvm install grails 2.1.0"
}
function check_candidate_present {
if [ -z "$1" ]; then
echo -e "\nNo candidate provided."
help
exit 0
fi
}
function check_version_present {
if [ -z "$1" ]; then
echo -e "\nNo candidate version provided."
help
exit 0
fi
}
function determine_candidate_version {
if [ -z "$1" ]; then
VERSION=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/default")
else
VERSION_VALID=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/$1")
if [ $VERSION_VALID == 'valid' ]; then
VERSION="$1"
else
echo ""
echo "Stop! $1 is not a valid $CANDIDATE version."
exit 0
fi
fi
}
function check_installed {
if [ -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo ""
echo "Stop! $CANDIDATE $VERSION is already installed."
exit 0
fi
}
function check_not_installed {
if [ ! -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo ""
echo "Stop! $CANDIDATE $VERSION is not installed."
exit 0
fi
}
function build_version_csv {
CANDIDATE="$1"
CSV=""
for version in $(ls -1 "$GVM_DIR/$CANDIDATE"); do
if [ $version != 'current' ]; then
CSV="$version,$CSV"
fi
done
CSV=${CSV%?}
}
function determine_current_version {
CANDIDATE="$1"
CURRENT=$(readlink "$GVM_DIR/$CANDIDATE/current" | sed -e "s_$GVM_DIR/$CANDIDATE/__g")
}
function download {
CANDIDATE="$1"
VERSION="$2"
mkdir -p "$GVM_DIR/archives"
if [ ! -f "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip" ]; then
echo ""
echo "Downloading: $CANDIDATE $VERSION"
echo ""
DOWNLOAD_URL="$GVM_SERVICE/download/$CANDIDATE/$VERSION?platform=$PLATFORM"
ZIP_ARCHIVE="$GVM_DIR/archives/$CANDIDATE-$VERSION.zip"
curl -L "$DOWNLOAD_URL" > "$ZIP_ARCHIVE"
validate_zip "$ZIP_ARCHIVE"
else
echo ""
echo "Found a previously downloaded $CANDIDATE $VERSION archive. Not downloading it again..."
validate_zip "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip"
fi
echo ""
}
function validate_zip {
ZIP_ARCHIVE="$1"
ZIP_OK=$(zip -T "$ZIP_ARCHIVE" | grep 'OK')
if [ -z "$ZIP_OK" ]; then
rm "$ZIP_ARCHIVE"
echo ""
echo "Stop! The archive was corrupt and has been removed! Please try installing again."
exit 0
fi
}
function server_down {
echo "------------------------------------------"
echo " This is serious! Service is down! "
echo " Please notify: @gvmtool immediately! "
echo "------------------------------------------"
exit 0
}
#
# Various sanity checks and default settings
#
if [ ! $(which curl) ]; then
echo "Please install curl through your package manager before using this tool."
exit 0
fi
if [ ! "$GVM_SERVICE" ]; then
GVM_SERVICE="http://localhost:8080"
fi
if [ ! "$GVM_DIR" ]; then
GVM_DIR="$HOME/.gvm"
fi
if [ ! -d "$GVM_DIR" ]; then
mkdir "$GVM_DIR"
fi
BROADCAST=$(curl -s "$GVM_SERVICE/app/alive/$GVM_VERSION")
if [ "$BROADCAST" ]; then
echo "$BROADCAST"
else
server_down
fi
if [ "$1" == "help" -o -z "$1" ]; then
help
exit 0
fi
#
# Command functions
#
function gvm-install {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_candidate_version "$2"
check_installed
download "$CANDIDATE" "$VERSION"
echo "Installing: $CANDIDATE $VERSION"
mkdir -p "$GVM_DIR/$CANDIDATE"
unzip -oq "$GVM_DIR/archives/$CANDIDATE-$VERSION.zip" -d "/tmp/"
mv "/tmp/$CANDIDATE-$VERSION" "$GVM_DIR/$CANDIDATE/$VERSION"
echo "Done installing!"
echo ""
echo "Start using $CANDIDATE $VERSION by issuing the following command:"
echo " gvm use $CANDIDATE $VERSION"
}
function gvm-use {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_candidate_version "$2"
check_not_installed
if [ -L "$GVM_DIR/$CANDIDATE/current" ]; then
unlink "$GVM_DIR/$CANDIDATE/current"
fi
ln -s "$GVM_DIR/$CANDIDATE/$VERSION" "$GVM_DIR/$CANDIDATE/current"
echo ""
echo Using "$CANDIDATE" version "$VERSION"
}
function gvm-current {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
determine_current_version "$CANDIDATE"
if [ -n "$CURRENT" ]; then
echo Using "$CANDIDATE" version "$CURRENT"
else
echo Not using any version of "$CANDIDATE"
fi
}
function gvm-list {
CANDIDATE="$1"
check_candidate_present "$CANDIDATE"
build_version_csv "$CANDIDATE"
determine_current_version "$CANDIDATE"
FRAGMENT=$(curl -s "$GVM_SERVICE/candidates/$CANDIDATE/list?platform=$PLATFORM&current=$CURRENT&installed=$CSV")
echo "$FRAGMENT"
}
function gvm-uninstall {
CANDIDATE="$1"
VERSION="$2"
check_candidate_present "$CANDIDATE"
check_version_present "$VERSION"
CURRENT=$(readlink "$GVM_DIR/$CANDIDATE/current" | sed -e "s_$GVM_DIR/$CANDIDATE/__g")
if [ -h "$GVM_DIR/$CANDIDATE/current" -a "$VERSION" == "$CURRENT" ]; then
echo ""
echo "Unselecting $CANDIDATE $VERSION..."
unlink "$GVM_DIR/$CANDIDATE/current"
fi
echo ""
if [ -d "$GVM_DIR/$CANDIDATE/$VERSION" ]; then
echo "Uninstalling $CANDIDATE $VERSION..."
rm -rf "$GVM_DIR/$CANDIDATE/$VERSION"
else
echo "$CANDIDATE $VERSION is not installed."
fi
}
function gvm-version {
echo "Groovy enVironment Manager $GVM_VERSION"
}
function gvm-selfupdate {
mkdir -p "$GVM_DIR/bin"
curl -s "$GVM_SERVICE/res/init?platform=$PLATFORM" > "$GVM_DIR/bin/gvm-init.sh"
curl -s "$GVM_SERVICE/res/gvm" > "$GVM_DIR/bin/gvm"
chmod +x "$GVM_DIR/bin/gvm-init.sh"
chmod +x "$GVM_DIR/bin/gvm"
echo ""
echo "Successfully upgraded GVM."
echo ""
}
# INSERT NEW COMMANDS BEFORE HERE
# Check whether the command exists
CMD_TYPE=`type -t gvm-"$1"`
if [ -z $CMD_TYPE ]; then
echo -e "\nInvalid command: $1"
help
exit 0
fi
# Check whether the candidate exists
CANDIDATE_VALID=$(curl -s "$GVM_SERVICE/candidates/$2")
if [ "$CANDIDATE_VALID" == 'invalid' ]; then
echo -e "\nStop! $2 is not a valid candidate."
exit 0
fi
# Main command
gvm-"$1" "$2" "$3"