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
|
# 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
|
# With inspriation from nvm.sh
|
||||||
|
|
||||||
SCRIPTPATH="$_"
|
SCRIPTPATH="$_"
|
||||||
|
|
||||||
|
#Exit script when any command returns non 0 exit code
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
_kvm_has() {
|
_kvm_has() {
|
||||||
type "$1" > /dev/null 2>&1
|
type "$1" > /dev/null 2>&1
|
||||||
return $?
|
return $?
|
||||||
|
|
@ -16,8 +21,11 @@ if _kvm_has "unsetopt"; then
|
||||||
KVM_CD_FLAGS="-q"
|
KVM_CD_FLAGS="-q"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
USERKREPATH="~/.kre"
|
eval USERKREPATH=~/.kre
|
||||||
USERKREPACKAGES="$USERKREPATH/packages"
|
USERKREPACKAGES="$USERKREPATH/packages"
|
||||||
|
MONO45=
|
||||||
|
X86=
|
||||||
|
X64=
|
||||||
|
|
||||||
# Traverse up in directory tree to find containing folder
|
# Traverse up in directory tree to find containing folder
|
||||||
_kvm_find_up() {
|
_kvm_find_up() {
|
||||||
|
|
@ -57,7 +65,7 @@ _kvm_find_latest() {
|
||||||
fi
|
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 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/")
|
version=$(echo $xml | sed "s/.*<[a-zA-Z]:Version>\([^<]*\).*/\1/")
|
||||||
|
|
||||||
|
|
@ -77,20 +85,99 @@ _kvm_prepend_path() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_kvm_download() {
|
_kvm_download() {
|
||||||
local packageName="$1"
|
local kreFullName="$1"
|
||||||
local destinationFolder="$2"
|
local kreFolder="$2"
|
||||||
echo "download $packageName $destinationFolder - TBD"
|
|
||||||
|
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() {
|
_kvm_unpack() {
|
||||||
local file="$1"
|
local kreFile="$1"
|
||||||
local destinationFolder="$2"
|
local kreFolder="$2"
|
||||||
echo "unpack $file $destinationFolder - TBD"
|
|
||||||
|
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() {
|
_kvm_requested_version_or_alias() {
|
||||||
local versionOrAlias="$1"
|
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()
|
kvm()
|
||||||
|
|
@ -116,10 +203,10 @@ kvm()
|
||||||
echo "install requested KRE from feed"
|
echo "install requested KRE from feed"
|
||||||
echo "add KRE bin to path of current command line"
|
echo "add KRE bin to path of current command line"
|
||||||
echo ""
|
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 "<semver>|<alias> add KRE bin to path of current command line "
|
||||||
echo "none remove KRE bin from 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 ""
|
||||||
echo "kvm list"
|
echo "kvm list"
|
||||||
echo "list KRE versions installed "
|
echo "list KRE versions installed "
|
||||||
|
|
@ -163,15 +250,11 @@ kvm()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Adding $kreBin to current PATH"
|
echo "Adding $kreBin to current PATH"
|
||||||
|
|
||||||
# Strip other version from PATH
|
|
||||||
PATH=`_kvm_strip_path "$PATH" "/bin"`
|
PATH=`_kvm_strip_path "$PATH" "/bin"`
|
||||||
# Prepend current version
|
|
||||||
PATH=`_kvm_prepend_path "$PATH" "$kreBin"`
|
PATH=`_kvm_prepend_path "$PATH" "$kreBin"`
|
||||||
else
|
else
|
||||||
local kreFullName="$(_kvm_requested_version_or_alias $versionOrAlias)"
|
local kreFullName="$(_kvm_requested_version_or_alias $versionOrAlias)"
|
||||||
local kreFolder="$USERKREPACKAGES/$kreFullName"
|
local kreFolder="$USERKREPACKAGES/$kreFullName"
|
||||||
|
|
||||||
_kvm_download "$kreFullName" "$kreFolder"
|
_kvm_download "$kreFullName" "$kreFolder"
|
||||||
kvm use "$versionOrAlias"
|
kvm use "$versionOrAlias"
|
||||||
fi
|
fi
|
||||||
|
|
@ -180,9 +263,50 @@ kvm()
|
||||||
"use" )
|
"use" )
|
||||||
[ $# -gt 3 ] && kvm help && return
|
[ $# -gt 3 ] && kvm help && return
|
||||||
[ $# -lt 2 ] && kvm help && return
|
[ $# -lt 2 ] && kvm help && return
|
||||||
local version="$2"
|
|
||||||
local persist="$3"
|
shift
|
||||||
echo "use $version - TBD ... "
|
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" )
|
"alias" )
|
||||||
|
|
@ -192,5 +316,13 @@ kvm()
|
||||||
local semver="$3"
|
local semver="$3"
|
||||||
|
|
||||||
echo "alias $alias $semver - TBD ..."
|
echo "alias $alias $semver - TBD ..."
|
||||||
|
|
||||||
|
;;
|
||||||
|
"list" )
|
||||||
|
# TBD, this lets our persistant impl work for now
|
||||||
|
echo "default"
|
||||||
|
echo ""
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kvm list default >/dev/null && kvm use default >/dev/null || true
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue