From d970cec8bc1c23092ffe7ada2e3737f8297b78ad Mon Sep 17 00:00:00 2001 From: David Fowler Date: Sat, 5 Jul 2014 18:38:44 -0700 Subject: [PATCH] Updated kvm to the latest versions --- kvm.ps1 | 128 +++++++++++++++++++++++++++---------------- kvm.sh | 167 +++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 186 insertions(+), 109 deletions(-) diff --git a/kvm.ps1 b/kvm.ps1 index cbf8b9bbcf19..834879a35a67 100644 --- a/kvm.ps1 +++ b/kvm.ps1 @@ -10,6 +10,8 @@ param( [switch] $x64 = $false, [switch] $svr50 = $false, [switch] $svrc50 = $false, + [alias("a")] + [string] $alias = $null, [parameter(Position=1, ValueFromRemainingArguments=$true)] [string[]]$args=@() ) @@ -18,12 +20,18 @@ $userKrePath = $env:USERPROFILE + "\.kre" $userKrePackages = $userKrePath + "\packages" $globalKrePath = $env:ProgramFiles + "\KRE" $globalKrePackages = $globalKrePath + "\packages" +$feed = $env:KRE_NUGET_API_URL + +if (!$feed) +{ + $feed = "https://www.myget.org/F/aspnetvnext/api/v2"; +} $scriptPath = $myInvocation.MyCommand.Definition function Kvm-Help { @" -K Runtime Environment Version Manager - Build 538 +K Runtime Environment Version Manager - Build 10002 USAGE: kvm [options] @@ -35,20 +43,24 @@ kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy
] -f|-force upgrade even if latest is already installed -proxy
use given address as proxy when accessing remote server -kvm install || [-x86][-x64] [-svr50][-svrc50] [-g|-global] - install requested KRE from feed +kvm install |||latest [-x86][-x64] [-svr50][-svrc50] [-a|-alias ] [-g|-global] [-f|-force] + | install requested KRE from feed + install requested KRE from package on local filesystem + latest install latest KRE from feed add KRE bin to path of current command line + -p|-persistent add KRE bin to PATH environment variables persistently + -a|-alias set alias for requested KRE on install -g|-global install to machine-wide location -f|-force install even if specified version is already installed kvm use ||none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global] - | add KRE bin to path of current command line + | add KRE bin to 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 -g|-global combined with -p to change machine PATH instead of user PATH kvm list - list KRE versions installed + list KRE versions installed kvm alias list KRE aliases which have been defined @@ -56,8 +68,9 @@ kvm alias kvm alias display value of named alias -kvm alias [-x86][-x64] [-svr50][-svrc50] - set alias to specific version +kvm alias | [-x86][-x64] [-svr50][-svrc50] + The name of the alias to set + | The KRE version to set the alias to. Alternatively use the version of the specified alias "@ | Write-Host } @@ -109,21 +122,19 @@ function Kvm-Global-Setup { function Kvm-Global-Upgrade { $persistent = $true + $alias="default" If (Needs-Elevation) { $arguments = "& '$scriptPath' upgrade -global $(Requested-Switches)" Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait break } - $version = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") - Kvm-Global-Install $version - Kvm-Alias-Set "default" $version + Kvm-Global-Install "latest" } function Kvm-Upgrade { $persistent = $true - $version = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") - Kvm-Install $version - Kvm-Alias-Set "default" $version + $alias="default" + Kvm-Install "latest" } function Add-Proxy-If-Specified { @@ -152,22 +163,18 @@ param( ) 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.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") Add-Proxy-If-Specified($wc) [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 } -function Kvm-Install-Latest { - Kvm-Install (Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86")) -} - function Do-Kvm-Download { param( [string] $kreFullName, @@ -175,7 +182,7 @@ param( ) $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 $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 $kreTempDownload = Join-Path $packagesFolder "temp" $tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg" - if(Test-Path $kreTempDownload) { + if(Test-Path $kreTempDownload) { del "$kreTempDownload\*" -recurse } else { md $kreTempDownload -Force | Out-Null @@ -208,7 +215,7 @@ param( Do-Kvm-Unpack $tempKreFile $kreTempDownload - md $kreFolder -Force | Out-Null + md $kreFolder -Force | Out-Null Write-Host "Installing to $kreFolder" mv "$kreTempDownload\*" $kreFolder } @@ -233,7 +240,7 @@ param( #make it a nupkg again Rename-Item $kreZip $kreFile } - + If (Test-Path ($kreFolder + "\[Content_Types].xml")) { Remove-Item ($kreFolder + "\[Content_Types].xml") } @@ -256,10 +263,17 @@ param( break } + if ($versionOrAlias -eq "latest") { + $versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") + } + $kreFullName = Requested-VersionOrAlias $versionOrAlias Do-Kvm-Download $kreFullName $globalKrePackages Kvm-Use $versionOrAlias + if (![string]::IsNullOrWhiteSpace($alias)) { + Kvm-Alias-Set $alias $versionOrAlias + } } function Kvm-Install { @@ -276,36 +290,44 @@ param( del $kreFolder -Recurse -Force $folderExists = $false; } - + if($folderExists) { Write-Host "Target folder '$kreFolder' already exists" } else { $tempUnpackFolder = Join-Path $userKrePackages "temp" $tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg" - - if(Test-Path $tempUnpackFolder) { + + if(Test-Path $tempUnpackFolder) { del "$tempUnpackFolder\*" -recurse } else { md $tempUnpackFolder -Force | Out-Null } copy $versionOrAlias $tempKreFile - + Do-Kvm-Unpack $tempKreFile $tempUnpackFolder md $kreFolder -Force | Out-Null Write-Host "Installing to $kreFolder" mv "$tempUnpackFolder\*" $kreFolder } - $kreBin = "$kreFolder\bin" - Write-Host "Adding" $kreBin "to process PATH" - Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) - } - else - { - $kreFullName = Requested-VersionOrAlias $versionOrAlias + $packageVersion = Package-Version $kreFullName + Kvm-Use $packageVersion + if (![string]::IsNullOrWhiteSpace($alias)) { + Kvm-Alias-Set $alias $packageVersion + } + } + else + { + if ($versionOrAlias -eq "latest") { + $versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") + } + $kreFullName = Requested-VersionOrAlias $versionOrAlias Do-Kvm-Download $kreFullName $userKrePackages Kvm-Use $versionOrAlias + if (![string]::IsNullOrWhiteSpace($alias)) { + Kvm-Alias-Set $alias $versionOrAlias + } } } @@ -325,7 +347,7 @@ function Kvm-List { } filter List-Parts { - $hasBin = Test-Path($_.FullName+"\bin") + $hasBin = Test-Path($_.FullName+"\bin") if (!$hasBin) { return } @@ -363,7 +385,7 @@ param( Write-Host "Removing KRE from process PATH" Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) - if ($persistent) { + if ($persistent) { Write-Host "Removing KRE from machine PATH" $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) $machinePath = Change-Path $machinePath "" ($globalKrePackages, $userKrePackages) @@ -378,7 +400,7 @@ param( if ($kreBin -eq $null) { Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" return - } + } Write-Host "Adding" $kreBin "to process PATH" Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) @@ -399,7 +421,7 @@ param( Write-Host "Removing KRE from process PATH" Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) - if ($persistent) { + if ($persistent) { Write-Host "Removing KRE from user PATH" $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) $userPath = Change-Path $userPath "" ($globalKrePackages, $userKrePackages) @@ -414,12 +436,12 @@ param( if ($kreBin -eq $null) { Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" return - } + } Write-Host "Adding" $kreBin "to process PATH" Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) - if ($persistent) { + if ($persistent) { Write-Host "Adding $kreBin to user PATH" $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) $userPath = Change-Path $userPath $kreBin ($globalKrePackages, $userKrePackages) @@ -438,7 +460,12 @@ param( [string] $name ) 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 { @@ -446,7 +473,7 @@ param( [string] $name, [string] $value ) - $kreFullName = "KRE-" + (Requested-Platform "svr50") + "-" + (Requested-Architecture "x86") + "." + $value + $kreFullName = Requested-VersionOrAlias $value Write-Host "Setting alias '$name' to '$kreFullName'" md ($userKrePath + "\alias\") -Force | Out-Null @@ -471,6 +498,13 @@ param( return $null } +function Package-Version() { +param( + [string] $kreFullName +) + return $kreFullName -replace '[^.]*.(.*)', '$1' +} + function Requested-VersionOrAlias() { param( [string] $versionOrAlias @@ -496,7 +530,7 @@ param( ) if ($svr50 -and $svrc50) { Throw "This command cannot accept both -svr50 and -svrc50" - } + } if ($svr50) { return "svr50" } @@ -512,7 +546,7 @@ param( ) if ($x86 -and $x64) { Throw "This command cannot accept both -x86 and -x64" - } + } if ($x86) { return "x86" } @@ -534,7 +568,7 @@ param( foreach($removePath in $removePaths) { if ($portion.StartsWith($removePath)) { $skip = $true - } + } } if (!$skip) { $newPath = $newPath + ";" + $portion @@ -574,7 +608,6 @@ function Requested-Switches() { switch -wildcard ($command + " " + $args.Count) { "setup 0" {Kvm-Global-Setup} "upgrade 0" {Kvm-Global-Upgrade} -# "install 0" {Kvm-Global-Install-Latest} "install 1" {Kvm-Global-Install $args[0]} # "list 0" {Kvm-Global-List} "use 1" {Kvm-Global-Use $args[0]} @@ -584,7 +617,6 @@ function Requested-Switches() { switch -wildcard ($command + " " + $args.Count) { "setup 0" {Kvm-Global-Setup} "upgrade 0" {Kvm-Upgrade} -# "install 0" {Kvm-Install-Latest} "install 1" {Kvm-Install $args[0]} "list 0" {Kvm-List} "use 1" {Kvm-Use $args[0]} diff --git a/kvm.sh b/kvm.sh index 7a252d294487..c9a91055b539 100644 --- a/kvm.sh +++ b/kvm.sh @@ -17,7 +17,9 @@ KRE_USER_PACKAGES="$KRE_USER_HOME/packages" KRE_MONO45= KRE_X86= 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() { local platform="mono45" @@ -28,11 +30,10 @@ _kvm_find_latest() { return 1 fi - local url="$KRE_NUGET_API_URL/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" - local cmd= - local xml="$(curl $url 2>/dev/null)" + local url="$KRE_FEED/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" + 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/')" - [[ $xml == $version ]] && return 1 echo $version } @@ -48,13 +49,28 @@ _kvm_prepend_path() { 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() { local kreFullName="$1" local kreFolder="$2" - local pkgName=$(echo "$kreFullName" | sed "s/\([^.]*\).*/\1/") - local pkgVersion=$(echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/") - local url="$KRE_NUGET_API_URL/package/$pkgName/$pkgVersion" + local pkgName=$(_kvm_package_name "$kreFullName") + local pkgVersion=$(_kvm_package_version "$kreFullName") + local url="$KRE_FEED/package/$pkgName/$pkgVersion" local kreFile="$kreFolder/$kreFullName.nupkg" if [ -e "$kreFolder" ]; then @@ -62,7 +78,7 @@ _kvm_download() { return 0 fi - echo "Downloading $kreFullName from $KRE_NUGET_API_URL" + echo "Downloading $kreFullName from $KRE_FEED" if ! _kvm_has "curl"; then 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/") - [[ $httpResult == "404" ]] && echo "$kreFullName was not found in repository $KRE_NUGET_API_URL" && return 1 - [[ $httpResult != "302" ]] && echo "Http Error $httpResult fetching $kreFullName from $KRE_NUGET_API_URL" && return 1 + [[ $httpResult == "404" ]] && echo "$kreFullName was not found in repository $KRE_FEED" && return 1 + [[ $httpResult != "302" && $httpResult != "200" ]] && echo "HTTP Error $httpResult fetching $kreFullName from $KRE_FEED" && return 1 _kvm_unpack $kreFile $kreFolder } @@ -153,23 +169,27 @@ kvm() case $1 in "help" ) echo "" - echo "K Runtime Environment Version Manager - Build {{BUILD_NUMBER}}" + echo "K Runtime Environment Version Manager - Build 10002" echo "" echo "USAGE: kvm [options]" echo "" echo "kvm upgrade" echo "install latest KRE from feed" - echo "set 'default' alias to installed version" - echo "add KRE bin to user PATH environment variable persistently" + echo "add KRE bin to path of current command line" + echo "set installed version as default" echo "" - echo "kvm install ||" - echo "install requested KRE from feed" + echo "kvm install |||latest [-a|-alias ] [-p -persistent]" + echo "| install requested KRE from feed" + echo " install requested KRE from local package on filesystem" + echo "latest install latest version of KRE from feed" + echo "-a|-alias set 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 "" echo "kvm use ||none [-p -persistent]" echo "| add KRE bin to 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 "kvm list" echo "list KRE versions installed " @@ -181,46 +201,64 @@ kvm() echo "display value of named alias" echo "" echo "kvm alias " - echo "set alias to specific version" + echo " The name of the alias to set" + echo "| The KRE version to set the alias to. Alternatively use the version of the specified alias" echo "" echo "" ;; "upgrade" ) [ $# -ne 1 ] && kvm help && return - echo "Determining latest version" - local version=$(_kvm_find_latest mono45 x86) - echo $version - kvm install $version - kvm alias default $version + kvm install latest -p ;; "install" ) - [ $# -ne 2 ] && kvm help && return - - local versionOrAlias="$2" - - if [ "$versionOrAlias" == *.nupkg ]; then - local kreFullName=$(echo $versionOrAlias | sed "s/\(.*\)\.nupkg/\1/") + [ $# -lt 2 ] && kvm help && return + shift + local persistant= + local versionOrAlias= + local alias= + 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 kreFile="$kreFolder/$kreFullName.nupkg" if [ -e "$kreFolder" ]; then - echo "Target folder '$kreFolder' already exists" + echo "$kreFullName already installed" else mkdir "$kreFolder" > /dev/null 2>&1 cp -a "$versionOrAlias" "$kreFile" _kvm_unpack "$kreFile" "$kreFolder" fi - - echo "Adding $kreBin to current PATH" - PATH=$(_kvm_strip_path "$PATH" "/bin") - PATH=(_kvm_prepend_path "$PATH" "$kreBin") + kvm use "$kreVersion" "$persistent" + [[ -n $alias ]] && kvm alias "$alias" "$kreVersion" else local kreFullName="$(_kvm_requested_version_or_alias $versionOrAlias)" local kreFolder="$KRE_USER_PACKAGES/$kreFullName" _kvm_download "$kreFullName" "$kreFolder" - kvm use "$versionOrAlias" + [[ $? == 1 ]] && return + kvm use "$versionOrAlias" "$persistent" + [[ -n $alias ]] && kvm alias "$alias" "$versionOrAlias" fi ;; @@ -229,13 +267,12 @@ kvm() [ $# -lt 2 ] && kvm help && return shift - local persistant= - + local persistent= while [ $# -ne 0 ] do - if [[ $1 == "-p" || $1 == "-persistant" ]]; then - local persistant="true" - else + if [[ $1 == "-p" || $1 == "-persistent" ]]; then + local persistent="true" + elif [[ -n $1 ]]; then local versionOrAlias=$1 fi shift @@ -244,7 +281,7 @@ kvm() if [[ $versionOrAlias == "none" ]]; then echo "Removing KRE from process 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 echo "Setting default KRE to none" @@ -263,20 +300,30 @@ kvm() echo "Adding" $kreBin "to process PATH" - PATH=`_kvm_strip_path "$PATH" "/bin"` - PATH=`_kvm_prepend_path "$PATH" "$kreBin"` + PATH=$(_kvm_strip_path "$PATH" "/bin") + PATH=$(_kvm_prepend_path "$PATH" "$kreBin") if [[ -n $persistent ]]; then - echo "Setting $kreBin as default KRE" - kvm alias default "$versionOrAlias" + local kreVersion=$(_kvm_package_version "$kreFullName") + kvm alias default "$kreVersion" fi ;; "alias" ) [[ $# -gt 3 ]] && kvm help && return + [[ ! -e "$KRE_USER_HOME/alias/" ]] && mkdir "$KRE_USER_HOME/alias/" > /dev/null + 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 "" return fi @@ -290,13 +337,11 @@ kvm() return fi - local semver="$3" - local kreFullName="KRE-$(_kvm_requested_platform mono45)-$(_kvm_requested_architecture x86).$semver" + local kreFullName=$(_kvm_requested_version_or_alias "$3") - [[ ! -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'" - [[ ! -e "$KRE_USER_HOME/alias/" ]] && mkdir "$KRE_USER_HOME/alias/" > /dev/null echo "$kreFullName" > "$KRE_USER_HOME/alias/$name.alias" ;; @@ -310,22 +355,22 @@ kvm() if [ $# == 2 ]; then local versionOrAlias=$2 local searchGlob=$(_kvm_requested_version_or_alias "$versionOrAlias") - echo $searchGlob fi - - for f in $(find $KRE_USER_PACKAGES/* -name $searchGlob -type d -prune -exec basename {} \;); do - #TODO: Format, extract package, version arch etc - echo -n $f - if [[ $PATH == *"$KRE_USER_PACKAGES/$f/bin"* ]]; then - echo " *" - else - echo "" - fi + echo "" + local formatString="%-6s %-20s %-7s %-12s %s\n" + printf "$formatString" "Active" "Version" "Runtime" "Architecture" "Location" + printf "$formatString" "------" "-------" "-------" "------------" "--------" + for f in $(find $KRE_USER_PACKAGES/* -name "$searchGlob" -type d -prune -exec basename {} \;); do + local active="" + [[ $PATH == *"$KRE_USER_PACKAGES/$f/bin"* ]] && local active=" *" + local pkgName=$(_kvm_package_runtime "$f") + local pkgVersion=$(_kvm_package_version "$f") + printf "$formatString" "$active" "$pkgVersion" "$pkgName" "x86" "$KRE_USER_PACKAGES" [[ $# == 2 ]] && echo "" && return 0 done echo "" - [[ $# == 2 ]] && return 1 # kvm list xxx - xxx was not found + [[ $# == 2 ]] && echo "$versionOrAlias not found" && return 1 ;; *)