Implemented kvm install and kvm use
This commit is contained in:
parent
4d5b16f25f
commit
ff41e7d743
170
kvm.sh
170
kvm.sh
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue