Updated kvm to the latest versions

This commit is contained in:
David Fowler 2014-07-05 18:38:44 -07:00
parent 9b763815c2
commit d970cec8bc
2 changed files with 186 additions and 109 deletions

128
kvm.ps1
View File

@ -10,6 +10,8 @@ param(
[switch] $x64 = $false, [switch] $x64 = $false,
[switch] $svr50 = $false, [switch] $svr50 = $false,
[switch] $svrc50 = $false, [switch] $svrc50 = $false,
[alias("a")]
[string] $alias = $null,
[parameter(Position=1, ValueFromRemainingArguments=$true)] [parameter(Position=1, ValueFromRemainingArguments=$true)]
[string[]]$args=@() [string[]]$args=@()
) )
@ -18,12 +20,18 @@ $userKrePath = $env:USERPROFILE + "\.kre"
$userKrePackages = $userKrePath + "\packages" $userKrePackages = $userKrePath + "\packages"
$globalKrePath = $env:ProgramFiles + "\KRE" $globalKrePath = $env:ProgramFiles + "\KRE"
$globalKrePackages = $globalKrePath + "\packages" $globalKrePackages = $globalKrePath + "\packages"
$feed = $env:KRE_NUGET_API_URL
if (!$feed)
{
$feed = "https://www.myget.org/F/aspnetvnext/api/v2";
}
$scriptPath = $myInvocation.MyCommand.Definition $scriptPath = $myInvocation.MyCommand.Definition
function Kvm-Help { function Kvm-Help {
@" @"
K Runtime Environment Version Manager - Build 538 K Runtime Environment Version Manager - Build 10002
USAGE: kvm <command> [options] USAGE: kvm <command> [options]
@ -35,20 +43,24 @@ kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy <ADDRESS>]
-f|-force upgrade even if latest is already installed -f|-force upgrade even if latest is already installed
-proxy <ADDRESS> use given address as proxy when accessing remote server -proxy <ADDRESS> use given address as proxy when accessing remote server
kvm install <semver>|<alias>|<nupkg> [-x86][-x64] [-svr50][-svrc50] [-g|-global] kvm install <semver>|<alias>|<nupkg>|latest [-x86][-x64] [-svr50][-svrc50] [-a|-alias <alias>] [-g|-global] [-f|-force]
install requested KRE from feed <semver>|<alias> install requested KRE from feed
<nupkg> install requested KRE from package on local filesystem
latest install latest KRE from feed
add KRE bin to path of current command line add KRE bin to path of current command line
-p|-persistent add KRE bin to PATH environment variables persistently
-a|-alias <alias> set alias <alias> for requested KRE on install
-g|-global install to machine-wide location -g|-global install to machine-wide location
-f|-force install even if specified version is already installed -f|-force install even if specified version is already installed
kvm use <semver>|<alias>|none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global] kvm use <semver>|<alias>|none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global]
<semver>|<alias> add KRE bin to path of current command line <semver>|<alias> add KRE bin to path of current command line
none remove KRE bin from path of current command line none remove KRE bin from path of current command line
-p|-persistent add KRE bin to PATH environment variables persistently -p|-persistent add KRE bin to PATH environment variables persistently
-g|-global combined with -p to change machine PATH instead of user PATH -g|-global combined with -p to change machine PATH instead of user PATH
kvm list kvm list
list KRE versions installed list KRE versions installed
kvm alias kvm alias
list KRE aliases which have been defined list KRE aliases which have been defined
@ -56,8 +68,9 @@ kvm alias
kvm alias <alias> kvm alias <alias>
display value of named alias display value of named alias
kvm alias <alias> <semver> [-x86][-x64] [-svr50][-svrc50] kvm alias <alias> <semver>|<alias> [-x86][-x64] [-svr50][-svrc50]
set alias to specific version <alias> The name of the alias to set
<semver>|<alias> The KRE version to set the alias to. Alternatively use the version of the specified alias
"@ | Write-Host "@ | Write-Host
} }
@ -109,21 +122,19 @@ function Kvm-Global-Setup {
function Kvm-Global-Upgrade { function Kvm-Global-Upgrade {
$persistent = $true $persistent = $true
$alias="default"
If (Needs-Elevation) { If (Needs-Elevation) {
$arguments = "& '$scriptPath' upgrade -global $(Requested-Switches)" $arguments = "& '$scriptPath' upgrade -global $(Requested-Switches)"
Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait
break break
} }
$version = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") Kvm-Global-Install "latest"
Kvm-Global-Install $version
Kvm-Alias-Set "default" $version
} }
function Kvm-Upgrade { function Kvm-Upgrade {
$persistent = $true $persistent = $true
$version = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") $alias="default"
Kvm-Install $version Kvm-Install "latest"
Kvm-Alias-Set "default" $version
} }
function Add-Proxy-If-Specified { function Add-Proxy-If-Specified {
@ -152,22 +163,18 @@ param(
) )
Write-Host "Determining latest version" Write-Host "Determining latest version"
$url = "https://www.myget.org/F/aspnetvnext/api/v2/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" $url = "$feed/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
$wc = New-Object System.Net.WebClient $wc = New-Object System.Net.WebClient
$wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") $wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c")
Add-Proxy-If-Specified($wc) Add-Proxy-If-Specified($wc)
[xml]$xml = $wc.DownloadString($url) [xml]$xml = $wc.DownloadString($url)
$version = Select-Xml "//d:Version" -Namespace @{d='http://schemas.microsoft.com/ado/2007/08/dataservices'} $xml $version = Select-Xml "//d:Version" -Namespace @{d='http://schemas.microsoft.com/ado/2007/08/dataservices'} $xml
return $version return $version
} }
function Kvm-Install-Latest {
Kvm-Install (Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86"))
}
function Do-Kvm-Download { function Do-Kvm-Download {
param( param(
[string] $kreFullName, [string] $kreFullName,
@ -175,7 +182,7 @@ param(
) )
$parts = $kreFullName.Split(".", 2) $parts = $kreFullName.Split(".", 2)
$url = "https://www.myget.org/F/aspnetvnext/api/v2/package/" + $parts[0] + "/" + $parts[1] $url = "$feed/package/" + $parts[0] + "/" + $parts[1]
$kreFolder = Join-Path $packagesFolder $kreFullName $kreFolder = Join-Path $packagesFolder $kreFullName
$kreFile = Join-Path $kreFolder "$kreFullName.nupkg" $kreFile = Join-Path $kreFolder "$kreFullName.nupkg"
@ -189,13 +196,13 @@ param(
} }
} }
Write-Host "Downloading" $kreFullName "from https://www.myget.org/F/aspnetvnext/api/v2/" Write-Host "Downloading" $kreFullName "from $feed"
#Downloading to temp location #Downloading to temp location
$kreTempDownload = Join-Path $packagesFolder "temp" $kreTempDownload = Join-Path $packagesFolder "temp"
$tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg" $tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg"
if(Test-Path $kreTempDownload) { if(Test-Path $kreTempDownload) {
del "$kreTempDownload\*" -recurse del "$kreTempDownload\*" -recurse
} else { } else {
md $kreTempDownload -Force | Out-Null md $kreTempDownload -Force | Out-Null
@ -208,7 +215,7 @@ param(
Do-Kvm-Unpack $tempKreFile $kreTempDownload Do-Kvm-Unpack $tempKreFile $kreTempDownload
md $kreFolder -Force | Out-Null md $kreFolder -Force | Out-Null
Write-Host "Installing to $kreFolder" Write-Host "Installing to $kreFolder"
mv "$kreTempDownload\*" $kreFolder mv "$kreTempDownload\*" $kreFolder
} }
@ -233,7 +240,7 @@ param(
#make it a nupkg again #make it a nupkg again
Rename-Item $kreZip $kreFile Rename-Item $kreZip $kreFile
} }
If (Test-Path ($kreFolder + "\[Content_Types].xml")) { If (Test-Path ($kreFolder + "\[Content_Types].xml")) {
Remove-Item ($kreFolder + "\[Content_Types].xml") Remove-Item ($kreFolder + "\[Content_Types].xml")
} }
@ -256,10 +263,17 @@ param(
break break
} }
if ($versionOrAlias -eq "latest") {
$versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86")
}
$kreFullName = Requested-VersionOrAlias $versionOrAlias $kreFullName = Requested-VersionOrAlias $versionOrAlias
Do-Kvm-Download $kreFullName $globalKrePackages Do-Kvm-Download $kreFullName $globalKrePackages
Kvm-Use $versionOrAlias Kvm-Use $versionOrAlias
if (![string]::IsNullOrWhiteSpace($alias)) {
Kvm-Alias-Set $alias $versionOrAlias
}
} }
function Kvm-Install { function Kvm-Install {
@ -276,36 +290,44 @@ param(
del $kreFolder -Recurse -Force del $kreFolder -Recurse -Force
$folderExists = $false; $folderExists = $false;
} }
if($folderExists) { if($folderExists) {
Write-Host "Target folder '$kreFolder' already exists" Write-Host "Target folder '$kreFolder' already exists"
} else { } else {
$tempUnpackFolder = Join-Path $userKrePackages "temp" $tempUnpackFolder = Join-Path $userKrePackages "temp"
$tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg" $tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg"
if(Test-Path $tempUnpackFolder) { if(Test-Path $tempUnpackFolder) {
del "$tempUnpackFolder\*" -recurse del "$tempUnpackFolder\*" -recurse
} else { } else {
md $tempUnpackFolder -Force | Out-Null md $tempUnpackFolder -Force | Out-Null
} }
copy $versionOrAlias $tempKreFile copy $versionOrAlias $tempKreFile
Do-Kvm-Unpack $tempKreFile $tempUnpackFolder Do-Kvm-Unpack $tempKreFile $tempUnpackFolder
md $kreFolder -Force | Out-Null md $kreFolder -Force | Out-Null
Write-Host "Installing to $kreFolder" Write-Host "Installing to $kreFolder"
mv "$tempUnpackFolder\*" $kreFolder mv "$tempUnpackFolder\*" $kreFolder
} }
$kreBin = "$kreFolder\bin" $packageVersion = Package-Version $kreFullName
Write-Host "Adding" $kreBin "to process PATH" Kvm-Use $packageVersion
Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) if (![string]::IsNullOrWhiteSpace($alias)) {
} Kvm-Alias-Set $alias $packageVersion
else }
{ }
$kreFullName = Requested-VersionOrAlias $versionOrAlias else
{
if ($versionOrAlias -eq "latest") {
$versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86")
}
$kreFullName = Requested-VersionOrAlias $versionOrAlias
Do-Kvm-Download $kreFullName $userKrePackages Do-Kvm-Download $kreFullName $userKrePackages
Kvm-Use $versionOrAlias Kvm-Use $versionOrAlias
if (![string]::IsNullOrWhiteSpace($alias)) {
Kvm-Alias-Set $alias $versionOrAlias
}
} }
} }
@ -325,7 +347,7 @@ function Kvm-List {
} }
filter List-Parts { filter List-Parts {
$hasBin = Test-Path($_.FullName+"\bin") $hasBin = Test-Path($_.FullName+"\bin")
if (!$hasBin) { if (!$hasBin) {
return return
} }
@ -363,7 +385,7 @@ param(
Write-Host "Removing KRE from process PATH" Write-Host "Removing KRE from process PATH"
Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages))
if ($persistent) { if ($persistent) {
Write-Host "Removing KRE from machine PATH" Write-Host "Removing KRE from machine PATH"
$machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
$machinePath = Change-Path $machinePath "" ($globalKrePackages, $userKrePackages) $machinePath = Change-Path $machinePath "" ($globalKrePackages, $userKrePackages)
@ -378,7 +400,7 @@ param(
if ($kreBin -eq $null) { if ($kreBin -eq $null) {
Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?"
return return
} }
Write-Host "Adding" $kreBin "to process PATH" Write-Host "Adding" $kreBin "to process PATH"
Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages))
@ -399,7 +421,7 @@ param(
Write-Host "Removing KRE from process PATH" Write-Host "Removing KRE from process PATH"
Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages))
if ($persistent) { if ($persistent) {
Write-Host "Removing KRE from user PATH" Write-Host "Removing KRE from user PATH"
$userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User)
$userPath = Change-Path $userPath "" ($globalKrePackages, $userKrePackages) $userPath = Change-Path $userPath "" ($globalKrePackages, $userKrePackages)
@ -414,12 +436,12 @@ param(
if ($kreBin -eq $null) { if ($kreBin -eq $null) {
Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?"
return return
} }
Write-Host "Adding" $kreBin "to process PATH" Write-Host "Adding" $kreBin "to process PATH"
Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages))
if ($persistent) { if ($persistent) {
Write-Host "Adding $kreBin to user PATH" Write-Host "Adding $kreBin to user PATH"
$userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User)
$userPath = Change-Path $userPath $kreBin ($globalKrePackages, $userKrePackages) $userPath = Change-Path $userPath $kreBin ($globalKrePackages, $userKrePackages)
@ -438,7 +460,12 @@ param(
[string] $name [string] $name
) )
md ($userKrePath + "\alias\") -Force | Out-Null md ($userKrePath + "\alias\") -Force | Out-Null
Write-Host "Alias '$name' is set to" (Get-Content ($userKrePath + "\alias\" + $name + ".txt")) $aliasFilePath=$userKrePath + "\alias\" + $name + ".txt"
if (!(Test-Path $aliasFilePath)) {
Write-Host "Alias '$name' does not exist"
} else {
Write-Host "Alias '$name' is set to" (Get-Content ($userKrePath + "\alias\" + $name + ".txt"))
}
} }
function Kvm-Alias-Set { function Kvm-Alias-Set {
@ -446,7 +473,7 @@ param(
[string] $name, [string] $name,
[string] $value [string] $value
) )
$kreFullName = "KRE-" + (Requested-Platform "svr50") + "-" + (Requested-Architecture "x86") + "." + $value $kreFullName = Requested-VersionOrAlias $value
Write-Host "Setting alias '$name' to '$kreFullName'" Write-Host "Setting alias '$name' to '$kreFullName'"
md ($userKrePath + "\alias\") -Force | Out-Null md ($userKrePath + "\alias\") -Force | Out-Null
@ -471,6 +498,13 @@ param(
return $null return $null
} }
function Package-Version() {
param(
[string] $kreFullName
)
return $kreFullName -replace '[^.]*.(.*)', '$1'
}
function Requested-VersionOrAlias() { function Requested-VersionOrAlias() {
param( param(
[string] $versionOrAlias [string] $versionOrAlias
@ -496,7 +530,7 @@ param(
) )
if ($svr50 -and $svrc50) { if ($svr50 -and $svrc50) {
Throw "This command cannot accept both -svr50 and -svrc50" Throw "This command cannot accept both -svr50 and -svrc50"
} }
if ($svr50) { if ($svr50) {
return "svr50" return "svr50"
} }
@ -512,7 +546,7 @@ param(
) )
if ($x86 -and $x64) { if ($x86 -and $x64) {
Throw "This command cannot accept both -x86 and -x64" Throw "This command cannot accept both -x86 and -x64"
} }
if ($x86) { if ($x86) {
return "x86" return "x86"
} }
@ -534,7 +568,7 @@ param(
foreach($removePath in $removePaths) { foreach($removePath in $removePaths) {
if ($portion.StartsWith($removePath)) { if ($portion.StartsWith($removePath)) {
$skip = $true $skip = $true
} }
} }
if (!$skip) { if (!$skip) {
$newPath = $newPath + ";" + $portion $newPath = $newPath + ";" + $portion
@ -574,7 +608,6 @@ function Requested-Switches() {
switch -wildcard ($command + " " + $args.Count) { switch -wildcard ($command + " " + $args.Count) {
"setup 0" {Kvm-Global-Setup} "setup 0" {Kvm-Global-Setup}
"upgrade 0" {Kvm-Global-Upgrade} "upgrade 0" {Kvm-Global-Upgrade}
# "install 0" {Kvm-Global-Install-Latest}
"install 1" {Kvm-Global-Install $args[0]} "install 1" {Kvm-Global-Install $args[0]}
# "list 0" {Kvm-Global-List} # "list 0" {Kvm-Global-List}
"use 1" {Kvm-Global-Use $args[0]} "use 1" {Kvm-Global-Use $args[0]}
@ -584,7 +617,6 @@ function Requested-Switches() {
switch -wildcard ($command + " " + $args.Count) { switch -wildcard ($command + " " + $args.Count) {
"setup 0" {Kvm-Global-Setup} "setup 0" {Kvm-Global-Setup}
"upgrade 0" {Kvm-Upgrade} "upgrade 0" {Kvm-Upgrade}
# "install 0" {Kvm-Install-Latest}
"install 1" {Kvm-Install $args[0]} "install 1" {Kvm-Install $args[0]}
"list 0" {Kvm-List} "list 0" {Kvm-List}
"use 1" {Kvm-Use $args[0]} "use 1" {Kvm-Use $args[0]}

167
kvm.sh
View File

@ -17,7 +17,9 @@ KRE_USER_PACKAGES="$KRE_USER_HOME/packages"
KRE_MONO45= KRE_MONO45=
KRE_X86= KRE_X86=
KRE_X64= KRE_X64=
KRE_NUGET_API_URL="https://www.myget.org/F/aspnetvnext/api/v2" if [ -z "$KRE_FEED" ]; then
KRE_FEED="https://www.myget.org/F/aspnetvnext/api/v2"
fi
_kvm_find_latest() { _kvm_find_latest() {
local platform="mono45" local platform="mono45"
@ -28,11 +30,10 @@ _kvm_find_latest() {
return 1 return 1
fi fi
local url="$KRE_NUGET_API_URL/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" local url="$KRE_FEED/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
local cmd= xml="$(curl $url 2>/dev/null)"
local xml="$(curl $url 2>/dev/null)" echo $xml | grep \<[a-zA-Z]:Version\>* >> /dev/null || return 1
version="$(echo $xml | sed 's/.*<[a-zA-Z]:Version>\([^<]*\).*/\1/')" version="$(echo $xml | sed 's/.*<[a-zA-Z]:Version>\([^<]*\).*/\1/')"
[[ $xml == $version ]] && return 1
echo $version echo $version
} }
@ -48,13 +49,28 @@ _kvm_prepend_path() {
fi fi
} }
_kvm_package_version() {
local kreFullName="$1"
echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/"
}
_kvm_package_name() {
local kreFullName="$1"
echo "$kreFullName" | sed "s/\([^.]*\).*/\1/"
}
_kvm_package_runtime() {
local kreFullName="$1"
echo "$kreFullName" | sed "s/KRE-\([^-]*\).*/\1/"
}
_kvm_download() { _kvm_download() {
local kreFullName="$1" local kreFullName="$1"
local kreFolder="$2" local kreFolder="$2"
local pkgName=$(echo "$kreFullName" | sed "s/\([^.]*\).*/\1/") local pkgName=$(_kvm_package_name "$kreFullName")
local pkgVersion=$(echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/") local pkgVersion=$(_kvm_package_version "$kreFullName")
local url="$KRE_NUGET_API_URL/package/$pkgName/$pkgVersion" local url="$KRE_FEED/package/$pkgName/$pkgVersion"
local kreFile="$kreFolder/$kreFullName.nupkg" local kreFile="$kreFolder/$kreFullName.nupkg"
if [ -e "$kreFolder" ]; then if [ -e "$kreFolder" ]; then
@ -62,7 +78,7 @@ _kvm_download() {
return 0 return 0
fi fi
echo "Downloading $kreFullName from $KRE_NUGET_API_URL" echo "Downloading $kreFullName from $KRE_FEED"
if ! _kvm_has "curl"; then if ! _kvm_has "curl"; then
echo "KVM Needs curl to proceed." >&2; echo "KVM Needs curl to proceed." >&2;
@ -73,8 +89,8 @@ _kvm_download() {
local httpResult=$(curl -L -D - -u aspnetreadonly:4d8a2d9c-7b80-4162-9978-47e918c9658c "$url" -o "$kreFile" 2>/dev/null | grep "^HTTP/1.1" | head -n 1 | sed "s/HTTP.1.1 \([0-9]*\).*/\1/") local httpResult=$(curl -L -D - -u aspnetreadonly:4d8a2d9c-7b80-4162-9978-47e918c9658c "$url" -o "$kreFile" 2>/dev/null | grep "^HTTP/1.1" | head -n 1 | sed "s/HTTP.1.1 \([0-9]*\).*/\1/")
[[ $httpResult == "404" ]] && echo "$kreFullName was not found in repository $KRE_NUGET_API_URL" && return 1 [[ $httpResult == "404" ]] && echo "$kreFullName was not found in repository $KRE_FEED" && return 1
[[ $httpResult != "302" ]] && echo "Http Error $httpResult fetching $kreFullName from $KRE_NUGET_API_URL" && return 1 [[ $httpResult != "302" && $httpResult != "200" ]] && echo "HTTP Error $httpResult fetching $kreFullName from $KRE_FEED" && return 1
_kvm_unpack $kreFile $kreFolder _kvm_unpack $kreFile $kreFolder
} }
@ -153,23 +169,27 @@ kvm()
case $1 in case $1 in
"help" ) "help" )
echo "" echo ""
echo "K Runtime Environment Version Manager - Build {{BUILD_NUMBER}}" echo "K Runtime Environment Version Manager - Build 10002"
echo "" echo ""
echo "USAGE: kvm <command> [options]" echo "USAGE: kvm <command> [options]"
echo "" echo ""
echo "kvm upgrade" echo "kvm upgrade"
echo "install latest KRE from feed" echo "install latest KRE from feed"
echo "set 'default' alias to installed version" echo "add KRE bin to path of current command line"
echo "add KRE bin to user PATH environment variable persistently" echo "set installed version as default"
echo "" echo ""
echo "kvm install <semver>|<alias>|<nupkg>" echo "kvm install <semver>|<alias>|<nupkg>|latest [-a|-alias <alias>] [-p -persistent]"
echo "install requested KRE from feed" echo "<semver>|<alias> install requested KRE from feed"
echo "<nupkg> install requested KRE from local package on filesystem"
echo "latest install latest version of KRE from feed"
echo "-a|-alias <alias> set alias <alias> for requested KRE on install"
echo "-p -persistent set installed version as default"
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 set selected version as default" echo "-p -persistent set selected version as default"
echo "" echo ""
echo "kvm list" echo "kvm list"
echo "list KRE versions installed " echo "list KRE versions installed "
@ -181,46 +201,64 @@ kvm()
echo "display value of named alias" echo "display value of named alias"
echo "" echo ""
echo "kvm alias <alias> <semver>" echo "kvm alias <alias> <semver>"
echo "set alias to specific version" echo "<alias> The name of the alias to set"
echo "<semver>|<alias> The KRE version to set the alias to. Alternatively use the version of the specified alias"
echo "" echo ""
echo "" echo ""
;; ;;
"upgrade" ) "upgrade" )
[ $# -ne 1 ] && kvm help && return [ $# -ne 1 ] && kvm help && return
echo "Determining latest version" kvm install latest -p
local version=$(_kvm_find_latest mono45 x86)
echo $version
kvm install $version
kvm alias default $version
;; ;;
"install" ) "install" )
[ $# -ne 2 ] && kvm help && return [ $# -lt 2 ] && kvm help && return
shift
local versionOrAlias="$2" local persistant=
local versionOrAlias=
if [ "$versionOrAlias" == *.nupkg ]; then local alias=
local kreFullName=$(echo $versionOrAlias | sed "s/\(.*\)\.nupkg/\1/") while [ $# -ne 0 ]
do
if [[ $1 == "-p" || $1 == "-persistant" ]]; then
local persistent="-p"
elif [[ $1 == "-a" || $1 == "-alias" ]]; then
local alias=$2
shift
elif [[ -n $1 ]]; then
[[ -n $versionOrAlias ]] && echo "Invalid option $1" && kvm help && return 1
local versionOrAlias=$1
fi
shift
done
if [[ "$versionOrAlias" == "latest" ]]; then
echo "Determining latest version"
versionOrAlias=$(_kvm_find_latest mono45 x86)
[[ $? == 1 ]] && echo "Error: Could not find latest version from feed $KRE_FEED" && return 1
echo "Latest version is $versionOrAlias"
fi
if [[ "$versionOrAlias" == *.nupkg ]]; then
local kreFullName=$(basename $versionOrAlias | sed "s/\(.*\)\.nupkg/\1/")
local kreVersion=$(_kvm_package_version "$kreFullName")
local kreFolder="$KRE_USER_PACKAGES/$kreFullName" local kreFolder="$KRE_USER_PACKAGES/$kreFullName"
local kreFile="$kreFolder/$kreFullName.nupkg" local kreFile="$kreFolder/$kreFullName.nupkg"
if [ -e "$kreFolder" ]; then if [ -e "$kreFolder" ]; then
echo "Target folder '$kreFolder' already exists" echo "$kreFullName already installed"
else else
mkdir "$kreFolder" > /dev/null 2>&1 mkdir "$kreFolder" > /dev/null 2>&1
cp -a "$versionOrAlias" "$kreFile" cp -a "$versionOrAlias" "$kreFile"
_kvm_unpack "$kreFile" "$kreFolder" _kvm_unpack "$kreFile" "$kreFolder"
fi fi
kvm use "$kreVersion" "$persistent"
echo "Adding $kreBin to current PATH" [[ -n $alias ]] && kvm alias "$alias" "$kreVersion"
PATH=$(_kvm_strip_path "$PATH" "/bin")
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="$KRE_USER_PACKAGES/$kreFullName" local kreFolder="$KRE_USER_PACKAGES/$kreFullName"
_kvm_download "$kreFullName" "$kreFolder" _kvm_download "$kreFullName" "$kreFolder"
kvm use "$versionOrAlias" [[ $? == 1 ]] && return
kvm use "$versionOrAlias" "$persistent"
[[ -n $alias ]] && kvm alias "$alias" "$versionOrAlias"
fi fi
;; ;;
@ -229,13 +267,12 @@ kvm()
[ $# -lt 2 ] && kvm help && return [ $# -lt 2 ] && kvm help && return
shift shift
local persistant= local persistent=
while [ $# -ne 0 ] while [ $# -ne 0 ]
do do
if [[ $1 == "-p" || $1 == "-persistant" ]]; then if [[ $1 == "-p" || $1 == "-persistent" ]]; then
local persistant="true" local persistent="true"
else elif [[ -n $1 ]]; then
local versionOrAlias=$1 local versionOrAlias=$1
fi fi
shift shift
@ -244,7 +281,7 @@ kvm()
if [[ $versionOrAlias == "none" ]]; then if [[ $versionOrAlias == "none" ]]; then
echo "Removing KRE from process PATH" echo "Removing KRE from process PATH"
# Strip other version from PATH # Strip other version from PATH
PATH=`_kvm_strip_path "$PATH" "/bin"` PATH=$(_kvm_strip_path "$PATH" "/bin")
if [[ -n $persistent && -e "$KRE_USER_HOME/alias/default.alias" ]]; then if [[ -n $persistent && -e "$KRE_USER_HOME/alias/default.alias" ]]; then
echo "Setting default KRE to none" echo "Setting default KRE to none"
@ -263,20 +300,30 @@ kvm()
echo "Adding" $kreBin "to process PATH" echo "Adding" $kreBin "to process PATH"
PATH=`_kvm_strip_path "$PATH" "/bin"` PATH=$(_kvm_strip_path "$PATH" "/bin")
PATH=`_kvm_prepend_path "$PATH" "$kreBin"` PATH=$(_kvm_prepend_path "$PATH" "$kreBin")
if [[ -n $persistent ]]; then if [[ -n $persistent ]]; then
echo "Setting $kreBin as default KRE" local kreVersion=$(_kvm_package_version "$kreFullName")
kvm alias default "$versionOrAlias" kvm alias default "$kreVersion"
fi fi
;; ;;
"alias" ) "alias" )
[[ $# -gt 3 ]] && kvm help && return [[ $# -gt 3 ]] && kvm help && return
[[ ! -e "$KRE_USER_HOME/alias/" ]] && mkdir "$KRE_USER_HOME/alias/" > /dev/null
if [[ $# == 1 ]]; then if [[ $# == 1 ]]; then
for f in $(find "$KRE_USER_HOME/alias" -name *.alias); do printf "%-20s %s\n" "$(basename $f | sed 's/.alias//')" "$(cat $f)"; done echo ""
local format="%-20s %s\n"
printf "$format" "Alias" "Name"
printf "$format" "-----" "----"
for _kvm_file in $(find "$KRE_USER_HOME/alias" -name *.alias); do
local alias="$(basename $_kvm_file | sed 's/.alias//')"
local name="$(cat $_kvm_file)"
printf "$format" "$alias" "$name"
done
echo "" echo ""
return return
fi fi
@ -290,13 +337,11 @@ kvm()
return return
fi fi
local semver="$3" local kreFullName=$(_kvm_requested_version_or_alias "$3")
local kreFullName="KRE-$(_kvm_requested_platform mono45)-$(_kvm_requested_architecture x86).$semver"
[[ ! -d "$KRE_USER_PACKAGES/$kreFullName" ]] && echo "$semver is not an installed KRE version." && return 1 [[ ! -d "$KRE_USER_PACKAGES/$kreFullName" ]] && echo "$kreFullName is not an installed KRE version." && return 1
echo "Setting alias '$name' to '$kreFullName'" echo "Setting alias '$name' to '$kreFullName'"
[[ ! -e "$KRE_USER_HOME/alias/" ]] && mkdir "$KRE_USER_HOME/alias/" > /dev/null
echo "$kreFullName" > "$KRE_USER_HOME/alias/$name.alias" echo "$kreFullName" > "$KRE_USER_HOME/alias/$name.alias"
;; ;;
@ -310,22 +355,22 @@ kvm()
if [ $# == 2 ]; then if [ $# == 2 ]; then
local versionOrAlias=$2 local versionOrAlias=$2
local searchGlob=$(_kvm_requested_version_or_alias "$versionOrAlias") local searchGlob=$(_kvm_requested_version_or_alias "$versionOrAlias")
echo $searchGlob
fi fi
echo ""
for f in $(find $KRE_USER_PACKAGES/* -name $searchGlob -type d -prune -exec basename {} \;); do local formatString="%-6s %-20s %-7s %-12s %s\n"
#TODO: Format, extract package, version arch etc printf "$formatString" "Active" "Version" "Runtime" "Architecture" "Location"
echo -n $f printf "$formatString" "------" "-------" "-------" "------------" "--------"
if [[ $PATH == *"$KRE_USER_PACKAGES/$f/bin"* ]]; then for f in $(find $KRE_USER_PACKAGES/* -name "$searchGlob" -type d -prune -exec basename {} \;); do
echo " *" local active=""
else [[ $PATH == *"$KRE_USER_PACKAGES/$f/bin"* ]] && local active=" *"
echo "" local pkgName=$(_kvm_package_runtime "$f")
fi local pkgVersion=$(_kvm_package_version "$f")
printf "$formatString" "$active" "$pkgVersion" "$pkgName" "x86" "$KRE_USER_PACKAGES"
[[ $# == 2 ]] && echo "" && return 0 [[ $# == 2 ]] && echo "" && return 0
done done
echo "" echo ""
[[ $# == 2 ]] && return 1 # kvm list xxx - xxx was not found [[ $# == 2 ]] && echo "$versionOrAlias not found" && return 1
;; ;;
*) *)