Implemented kvm install and kvm use

This commit is contained in:
Graeme Christie 2014-05-24 16:01:02 +08:00
parent 4d5b16f25f
commit ff41e7d743
1 changed files with 151 additions and 19 deletions

170
kvm.sh
View File

@ -1,9 +1,14 @@
# kvm.sh
# Source this file from you .bash-profile or script to use
# Source this file from your .bash-profile or script to use
# With inspriation from nvm.sh
SCRIPTPATH="$_"
#Exit script when any command returns non 0 exit code
set -e
set -o pipefail
_kvm_has() {
type "$1" > /dev/null 2>&1
return $?
@ -16,8 +21,11 @@ if _kvm_has "unsetopt"; then
KVM_CD_FLAGS="-q"
fi
USERKREPATH="~/.kre"
eval USERKREPATH=~/.kre
USERKREPACKAGES="$USERKREPATH/packages"
MONO45=
X86=
X64=
# Traverse up in directory tree to find containing folder
_kvm_find_up() {
@ -57,7 +65,7 @@ _kvm_find_latest() {
fi
local url="https://www.myget.org/F/aspnetvnext/api/v2/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
local xml=$(curl -silent -u aspnetreadonly:4d8a2d9c-7b80-4162-9978-47e918c9658c $url)
local xml=$(curl -silent -L -u aspnetreadonly:4d8a2d9c-7b80-4162-9978-47e918c9658c $url)
version=$(echo $xml | sed "s/.*<[a-zA-Z]:Version>\([^<]*\).*/\1/")
@ -77,20 +85,99 @@ _kvm_prepend_path() {
}
_kvm_download() {
local packageName="$1"
local destinationFolder="$2"
echo "download $packageName $destinationFolder - TBD"
local kreFullName="$1"
local kreFolder="$2"
local pkgName=$(echo "$kreFullName" | sed "s/\([^.]*\).*/\1/")
local pkgVersion=$(echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/")
local url="https://www.myget.org/F/aspnetvnext/api/v2/package/$pkgName/$pkgVersion"
local kreFile="$kreFolder/$kreFullName.nupkg"
if [ -e "$kreFolder" ]; then
echo "$kreFullName already installed."
return 0
fi
echo "Downloading" $kreFullName "from https://www.myget.org/F/aspnetvnext/api/v2/"
if ! _kvm_has "curl"; then
echo "KVM Needs curl to proceed." >&2;
return 1
fi
mkdir -p "$kreFolder" > /dev/null 2>&1
curl -silent -L -u aspnetreadonly:4d8a2d9c-7b80-4162-9978-47e918c9658c "$url" -o "$kreFile"
_kvm_unpack $kreFile $kreFolder
}
_kvm_unpack() {
local file="$1"
local destinationFolder="$2"
echo "unpack $file $destinationFolder - TBD"
local kreFile="$1"
local kreFolder="$2"
echo "Installing to $kreFolder"
if ! _kvm_has "unzip"; then
echo "KVM Needs unzip to proceed." >&2;
return 1
fi
unzip $kreFile -d $kreFolder > /dev/null 2>&1
[ -e "$kreFolder/[Content_Types].xml" ] && rm "$kreFolder/[Content_Types].xml"
[ -e "$kreFolder/_rels/" ] && rm -rf "$kreFolder/_rels/"
[ -e "$kreFolder/package/" ] && rm -rf "$kreFolder/_package/"
}
# This is not really needed. Placeholder until I get clarification on the supported platforms for mono
_kvm_requested_platform() {
local default=$1
[[ $MONO45 ]] && echo "mono45" && return
echo $default
}
# Ditto - waiting for clarification on mono-x64 packages
_kvm_requested_architecture() {
local default=$1
[[ $X86 && $X64 ]] && echo "This command cannot accept both -x86 and -x64" && return 1
[[ $X86 ]] && echo "x86" && return
[[ $X64 ]] && echo "x64" && return
echo $default
}
_kvm_requested_version_or_alias() {
local versionOrAlias="$1"
echo "Requested version or alias $versionOrAlias - TBD"
if [ -e "$USERKREPATH/alias/$versionOrAlias.alias" ]; then
local aliasValue=$(cat "$USERKREPATH/alias/$versionOrAlias.alias")
local pkgName=$(echo $kreFullName | sed "s/\([^.]*\).*/\1/")
local pkgVersion=$(echo $kreFullName | sed "s/[^.]*\(.*\)/\1/")
local pkgPlatform=$(echo $pgkName | sed "s/.*-\([^-]*\).*/\1/" | _kvm_requested_platform)
local pkgArchitecture=$(echo $pgkName | sed "s/.*-.*-\([^-]*\).*/\1/" | _kvm_requested_architecture)
else
local pkgVersion=$versionOrAlias
local pkgPlatform=$(_kvm_requested_platform "mono45")
local pkgArchitecture=$(_kvm_requested_architecture "x86")
fi
echo "KRE-$pkgPlatform-$pkgArchitecture.$pkgVersion"
}
# This will be more relevant if we support global installs
_kvm_locate_kre_bin_from_full_name() {
local kreFullName=$1
[ -e "$USERKREPACKAGES/$kreFullName/bin" ] && echo "$USERKREPACKAGES/$kreFullName/bin" && return
}
kvm()
@ -116,10 +203,10 @@ kvm()
echo "install requested KRE from feed"
echo "add KRE bin to path of current command line"
echo ""
echo "kvm use <semver>|<alias>|none [-p --persistent]"
echo "kvm use <semver>|<alias>|none [-p -persistent]"
echo "<semver>|<alias> add KRE bin to path of current command line "
echo "none remove KRE bin from path of current command line"
echo "-p --persistent persist selected version to .kvmrc"
echo "-p -persistent persist selected version to .kvmrc"
echo ""
echo "kvm list"
echo "list KRE versions installed "
@ -163,15 +250,11 @@ kvm()
fi
echo "Adding $kreBin to current PATH"
# Strip other version from PATH
PATH=`_kvm_strip_path "$PATH" "/bin"`
# Prepend current version
PATH=`_kvm_prepend_path "$PATH" "$kreBin"`
else
local kreFullName="$(_kvm_requested_version_or_alias $versionOrAlias)"
local kreFolder="$USERKREPACKAGES/$kreFullName"
_kvm_download "$kreFullName" "$kreFolder"
kvm use "$versionOrAlias"
fi
@ -180,9 +263,50 @@ kvm()
"use" )
[ $# -gt 3 ] && kvm help && return
[ $# -lt 2 ] && kvm help && return
local version="$2"
local persist="$3"
echo "use $version - TBD ... "
shift
local persistant=
while [ $# -ne 0 ]
do
if [[ $1 == "-p" || $1 == "-persistant" ]]; then
local persistant="true"
else
local versionOrAlias=$1
fi
shift
done
if [[ $versionOrAlias == "none" ]]; then
echo "Removing KRE from process PATH"
# Strip other version from PATH
PATH=`_kvm_strip_path "$PATH" "/bin"`
if [[ $persistent&& -e "$USERKREPATH/alias/default.alias" ]]; then
echo "Setting default KRE to none"
rm "$USERKREPATH/alias/default.alias"
fi
return 0
fi
local kreFullName=$(_kvm_requested_version_or_alias "$versionOrAlias")
local kreBin=$(_kvm_locate_kre_bin_from_full_name "$kreFullName")
if [[ ! $kreBin ]]; then
echo "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?"
return 1
fi
echo "Adding" $kreBin "to process PATH"
PATH=`_kvm_strip_path "$PATH" "/bin"`
PATH=`_kvm_prepend_path "$PATH" "$kreBin"`
if [[ $persistent ]]; then
echo "Setting $kreBin as default KRE"
kvm alias default "$versionOrAlias"
fi
;;
"alias" )
@ -192,5 +316,13 @@ kvm()
local semver="$3"
echo "alias $alias $semver - TBD ..."
;;
"list" )
# TBD, this lets our persistant impl work for now
echo "default"
echo ""
esac
}
kvm list default >/dev/null && kvm use default >/dev/null || true