Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions kvm.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global]
-g|-global install to machine-wide location
-f|-force upgrade even if latest is already installed

kvm install <semver>|<alias>|<nupkg> [-x86][-x64] [-svr50][-svrc50] [-g|-global]
install requested KRE from feed
kvm install <semver>|<alias>|<nupkg>|latest [-x86][-x64] [-svr50][-svrc50] [-g|-global]
<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
-g|-global install to machine-wide location
-f|-force install even if specified version is already installed
Expand Down Expand Up @@ -112,15 +114,14 @@ function Kvm-Global-Upgrade {
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-Global-Install "latest"
Kvm-Alias-Set "default" $version
}

function Kvm-Upgrade {
$persistent = $true
$version = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86")
Kvm-Install $version
Kvm-Install "latest"
Kvm-Alias-Set "default" $version
}

Expand All @@ -142,10 +143,6 @@ param(
return $version
}

function Kvm-Install-Latest {
Kvm-Install (Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86"))
}

function Do-Kvm-Download {
param(
[string] $kreFullName,
Expand Down Expand Up @@ -233,6 +230,10 @@ 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
Expand Down Expand Up @@ -279,6 +280,9 @@ param(
}
else
{
if ($versionOrAlias -eq "latest") {
$versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86")
}
$kreFullName = Requested-VersionOrAlias $versionOrAlias

Do-Kvm-Download $kreFullName $userKrePackages
Expand Down Expand Up @@ -551,7 +555,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]}
Expand All @@ -561,7 +564,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]}
Expand Down
89 changes: 51 additions & 38 deletions kvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,17 @@ _kvm_prepend_path() {
fi
}

_kvm_package_version() {
local kreFullName="$1"
echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/"
}

_kvm_download() {
local kreFullName="$1"
local kreFolder="$2"

local pkgName=$(echo "$kreFullName" | sed "s/\([^.]*\).*/\1/")
local pkgVersion=$(echo "$kreFullName" | sed "s/[^.]*.\(.*\)/\1/")
local pkgVersion=$(_kvm_package_version "$kreFullName")
local url="$KRE_NUGET_API_URL/package/$pkgName/$pkgVersion"
local kreFile="$kreFolder/$kreFullName.nupkg"

Expand Down Expand Up @@ -159,20 +164,23 @@ kvm()
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 <semver>|<alias>|<nupkg>"
echo "install requested KRE from feed"
echo "kvm install <semver>|<alias>|<nupkg>|latest [-p -persistent]"
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 "-p -persistent set installed version as default"
echo "add KRE bin to path of current command line"
echo ""
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 "-p -persistent set selected version as default"
echo "-p -persistent set selected version as default"
echo ""
echo "kvm list"
echo "list KRE versions installed "
echo "list KRE versions installed"
echo ""
echo "kvm alias"
echo "list KRE aliases which have been defined"
Expand All @@ -188,39 +196,48 @@ kvm()

"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"
[ $# -gt 3 ] && kvm help && return
[ $# -lt 2 ] && kvm help && return

if [ "$versionOrAlias" == *.nupkg ]; then
local kreFullName=$(echo $versionOrAlias | sed "s/\(.*\)\.nupkg/\1/")
shift
local persistant=
while [ $# -ne 0 ]
do
if [[ $1 == "-p" || $1 == "-persistant" ]]; then
local persistent="-p"
else
local versionOrAlias=$1
fi
shift
done
if [[ "$versionOrAlias" == "latest" ]]; then
echo "Determining latest version"
local versionOrAlias=$(_kvm_find_latest mono45 x86)
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"
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"
fi
;;

Expand All @@ -229,18 +246,16 @@ kvm()
[ $# -lt 2 ] && kvm help && return

shift
local persistant=

local persistent=
while [ $# -ne 0 ]
do
if [[ $1 == "-p" || $1 == "-persistant" ]]; then
local persistant="true"
local persistent="true"
else
local versionOrAlias=$1
fi
shift
done

if [[ $versionOrAlias == "none" ]]; then
echo "Removing KRE from process PATH"
# Strip other version from PATH
Expand All @@ -252,31 +267,30 @@ kvm()
fi
return 0
fi

local kreFullName=$(_kvm_requested_version_or_alias "$versionOrAlias")
local kreBin=$(_kvm_locate_kre_bin_from_full_name "$kreFullName")

if [[ -z $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 [[ -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
_kvm_file=
for _kvm_file in $(find "$KRE_USER_HOME/alias" -name *.alias); do printf "%-20s %s\n" "$(basename $_kvm_file | sed 's/.alias//')" "$(cat $_kvm_file)"; done
[ -z $_kvm_file ] && echo "There are no aliases defined"
echo ""
return
fi
Expand All @@ -296,7 +310,6 @@ kvm()
[[ ! -d "$KRE_USER_PACKAGES/$kreFullName" ]] && echo "$semver 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"
;;
Expand Down