From 352e41ff20b992431e828c37fd3e0b60596af5a9 Mon Sep 17 00:00:00 2001 From: Doug Bunting Date: Thu, 1 Oct 2015 14:04:57 -0700 Subject: [PATCH] Update to latest `dnvm` - `beta8-15518` to `rc1-15523` - main changes include - remove `-a` alias for `-alias`; `build.cmd` files updated (thanx @NTaylorMullen) - [Linux] deprecate `dnvm unalias`; add `dnvm alias -d` - add `dnvm uninstall` --- build/dnvm.ps1 | 119 ++++++++++++++++++++++++++++++------- build/dnvm.sh | 158 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 221 insertions(+), 56 deletions(-) diff --git a/build/dnvm.ps1 b/build/dnvm.ps1 index 79a303b722..a3d947ce08 100644 --- a/build/dnvm.ps1 +++ b/build/dnvm.ps1 @@ -67,7 +67,7 @@ function _WriteOut { ### Constants $ProductVersion="1.0.0" -$BuildVersion="beta8-15518" +$BuildVersion="rc1-15523" $Authors="Microsoft Open Technologies, Inc." # If the Version hasn't been replaced... @@ -438,13 +438,13 @@ function Get-RuntimeAliasOrRuntimeInfo( filter List-Parts { param($aliases, $items) - $location = "" + $location = "" - $binDir = Join-Path $_.FullName "bin" - if ((Test-Path $binDir)) { + $binDir = Join-Path $_.FullName "bin" + if ((Test-Path $binDir)) { $location = $_.Parent.FullName } - $active = IsOnPath $binDir + $active = IsOnPath $binDir $fullAlias="" $delim="" @@ -1012,10 +1012,10 @@ filter ColorActive { <# .SYNOPSIS - Displays the DNVM version. + Displays the DNVM version. #> function dnvm-version { - _WriteOut "$FullVersion" + _WriteOut "$FullVersion" } <# @@ -1044,9 +1044,9 @@ function dnvm-list { } } - $aliases | Where-Object {$_.Orphan} | ForEach-Object { - $items += $_ | Select-Object @{label='Name';expression={$_.Name}}, @{label='FullName';expression={Join-Path $RuntimesDir $_.Name}} | List-Parts $aliases - } + $aliases | Where-Object {$_.Orphan} | ForEach-Object { + $items += $_ | Select-Object @{label='Name';expression={$_.Name}}, @{label='FullName';expression={Join-Path $RuntimesDir $_.Name}} | List-Parts $aliases + } if($PassThru) { $items @@ -1106,12 +1106,12 @@ function dnvm-alias { [Parameter(Position=1)] [string]$Version, - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [string]$Architecture = "", [Alias("r")] - [ValidateSet("", "clr","coreclr", "mono")] + [ValidateSet("", "clr", "coreclr", "mono")] [Parameter(ParameterSetName="Write")] [string]$Runtime = "", @@ -1174,17 +1174,16 @@ function dnvm-unalias { #> function dnvm-upgrade { param( - [Alias("a")] [Parameter(Mandatory=$false, Position=0)] [string]$Alias = "default", - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [Parameter(Mandatory=$false)] [string]$Architecture = "", [Alias("r")] - [ValidateSet("", "clr", "coreclr")] + [ValidateSet("", "clr", "coreclr", "mono")] [Parameter(Mandatory=$false)] [string]$Runtime = "", @@ -1205,9 +1204,11 @@ function dnvm-upgrade { [Parameter(Mandatory=$false)] [switch]$Ngen, + [Alias("u")] [Parameter(Mandatory=$false)] [switch]$Unstable, + [Alias("g")] [Parameter(Mandatory=$false)] [switch]$Global) @@ -1259,13 +1260,13 @@ function dnvm-install { [Parameter(Mandatory=$false, Position=0)] [string]$VersionNuPkgOrAlias, - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [Parameter(Mandatory=$false)] [string]$Architecture = "", [Alias("r")] - [ValidateSet("", "clr","coreclr","mono")] + [ValidateSet("", "clr", "coreclr", "mono")] [Parameter(Mandatory=$false)] [string]$Runtime = "", @@ -1273,7 +1274,6 @@ function dnvm-install { [Parameter(Mandatory=$false)] [string]$OS = "", - [Alias("a")] [Parameter(Mandatory=$false)] [string]$Alias, @@ -1290,12 +1290,15 @@ function dnvm-install { [Parameter(Mandatory=$false)] [switch]$Ngen, + [Alias("p")] [Parameter(Mandatory=$false)] [switch]$Persistent, + [Alias("u")] [Parameter(Mandatory=$false)] [switch]$Unstable, + [Alias("g")] [Parameter(Mandatory=$false)] [switch]$Global) @@ -1352,7 +1355,7 @@ function dnvm-install { if([String]::IsNullOrEmpty($Version)) { $Version = Get-PackageVersion $BaseName } - + if([String]::IsNullOrEmpty($OS)) { $OS = Get-PackageOS $BaseName } @@ -1525,6 +1528,70 @@ function dnvm-install { Write-Progress -Status "Done" -Activity "Install complete" -Id 1 -Complete } +<# +.SYNOPSIS + Uninstalls a version of the runtime +.PARAMETER VersionOrAlias + The version to uninstall from the current channel or an alias value to uninstall an alternate + runtime or architecture flavor of the specified alias. +.PARAMETER Architecture + The processor architecture of the runtime to uninstall (default: x86) +.PARAMETER Runtime + The runtime flavor to uninstall (default: clr) +.PARAMETER OS + The operating system that the runtime targets (default: win) +#> +function dnvm-uninstall { + param( + [Parameter(Mandatory=$true, Position=0)] + [string]$VersionOrAlias, + + [Alias("arch", "a")] + [ValidateSet("", "x86", "x64", "arm")] + [Parameter(Mandatory=$false)] + [string]$Architecture = "", + + [Alias("r")] + [ValidateSet("", "clr", "coreclr", "mono")] + [Parameter(Mandatory=$false)] + [string]$Runtime = "", + + [ValidateSet("", "win", "osx", "darwin", "linux")] + [Parameter(Mandatory=$false)] + [string]$OS = "") + + $aliasPath = Join-Path $AliasesDir "$VersionOrAlias$AliasExtension" + + if(Test-Path $aliasPath) { + $BaseName = Get-Content $aliasPath + } else { + $Version = $VersionOrAlias + $runtimeInfo = GetRuntimeInfo $Architecture $Runtime $OS $Version + $BaseName = $runtimeInfo.RuntimeName + } + + $runtimeFolder="" + if(Test-Path (Join-Path $RuntimesDir $BaseName)) { + $runtimeFolder = Join-Path $RuntimesDir $BaseName + } + if(Test-Path (Join-Path $GlobalRuntimesDir $BaseName)) { + $runtimeFolder = Join-Path $GlobalRuntimesDir $BaseName + } + + if($runtimeFolder -ne "") { + Remove-Item -literalPath $runtimeFolder -Force -Recurse + _WriteOut "Removed '$($runtimeFolder)'" + } else { + _WriteOut "'$($BaseName)' is not installed" + } + + $aliases = Get-RuntimeAlias + + $result = @($aliases | Where-Object { $_.Name.EndsWith($BaseName) }) + foreach($alias in $result) { + dnvm-alias -Delete -Name $alias.Alias + } +} <# .SYNOPSIS @@ -1545,7 +1612,7 @@ function dnvm-use { [Parameter(Mandatory=$true, Position=0)] [string]$VersionOrAlias, - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [Parameter(Mandatory=$false)] [string]$Architecture = "", @@ -1599,6 +1666,10 @@ function dnvm-use { Locates the dnx.exe for the specified version or alias and executes it, providing the remaining arguments to dnx.exe .PARAMETER VersionOrAlias The version of alias of the runtime to execute +.PARAMETER Architecture + The processor architecture of the runtime to use (default: x86, or whatever the alias specifies in the case of running an alias) +.PARAMETER Runtime + The runtime flavor of the runtime to use (default: clr, or whatever the alias specifies in the case of running an alias) .PARAMETER DnxArguments The arguments to pass to dnx.exe #> @@ -1607,7 +1678,7 @@ function dnvm-run { [Parameter(Mandatory=$true, Position=0)] [string]$VersionOrAlias, - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [Parameter(Mandatory=$false)] [string]$Architecture = "", @@ -1640,6 +1711,10 @@ function dnvm-run { Executes the specified command in a sub-shell where the PATH has been augmented to include the specified DNX .PARAMETER VersionOrAlias The version of alias of the runtime to make active in the sub-shell +.PARAMETER Architecture + The processor architecture of the runtime to use (default: x86, or whatever the alias specifies in the case of exec-ing an alias) +.PARAMETER Runtime + The runtime flavor of the runtime to use (default: clr, or whatever the alias specifies in the case of exec-ing an alias) .PARAMETER Command The command to execute in the sub-shell #> @@ -1650,7 +1725,7 @@ function dnvm-exec { [Parameter(Mandatory=$false, Position=1)] [string]$Command, - [Alias("arch")] + [Alias("arch", "a")] [ValidateSet("", "x86", "x64", "arm")] [Parameter(Mandatory=$false)] [string]$Architecture = "", diff --git a/build/dnvm.sh b/build/dnvm.sh index 5927888c18..739350641b 100644 --- a/build/dnvm.sh +++ b/build/dnvm.sh @@ -2,7 +2,7 @@ # Source this file from your .bash-profile or script to use # "Constants" -_DNVM_BUILDNUMBER="beta8-15518" +_DNVM_BUILDNUMBER="rc1-15523" _DNVM_AUTHORS="Microsoft Open Technologies, Inc." _DNVM_RUNTIME_PACKAGE_NAME="dnx" _DNVM_RUNTIME_FRIENDLY_NAME=".NET Execution Environment" @@ -220,10 +220,11 @@ __dnvm_update_self() { __dnvm_promptSudo() { local acceptSudo="$1" + local sudoMsg="$2" local answer= if [ "$acceptSudo" == "0" ]; then - echo "In order to install dnx globally, dnvm will have to temporarily run as root." + echo $2 read -p "You may be prompted for your password via 'sudo' during this process. Is this Ok? (y/N) " answer else answer="y" @@ -264,7 +265,7 @@ __dnvm_download() { local useSudo= mkdir -p "$runtimeFolder" > /dev/null 2>&1 if [ ! -d $runtimeFolder ]; then - if ! __dnvm_promptSudo $acceptSudo ; then + if ! __dnvm_promptSudo $acceptSudo "In order to install dnx globally, dnvm will have to temporarily run as root." ; then useSudo=sudo sudo mkdir -p "$runtimeFolder" > /dev/null 2>&1 || return 1 else @@ -418,33 +419,41 @@ __dnvm_help() { echo " install latest $_DNVM_RUNTIME_SHORT_NAME from feed" echo " adds $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line" echo " set installed version as default" - echo " -f|forces force upgrade. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed" - echo " -u|unstable use unstable feed. Installs the $_DNVM_RUNTIME_SHORT_NAME from the unstable feed" - echo " -r|runtime The runtime flavor to install [clr or coreclr] (default: clr)" - echo " -g|global Installs the latest $_DNVM_RUNTIME_SHORT_NAME in the configured global $_DNVM_RUNTIME_SHORT_NAME file location (default: /usr/local/lib/dnx current: $DNX_GLOBAL_HOME)" - echo " -y Assume Yes to all queries and do not prompt" + echo " -f|-force force upgrade. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed" + echo " -u|-unstable use unstable feed. Installs the $_DNVM_RUNTIME_SHORT_NAME from the unstable feed" + echo " -r|-runtime runtime flavor to install [mono or coreclr] (default: mono)" + echo " -g|-global Installs the latest $_DNVM_RUNTIME_SHORT_NAME in the configured global $_DNVM_RUNTIME_SHORT_NAME file location (default: /usr/local/lib/dnx current: $DNX_GLOBAL_HOME)" + echo " -y Assume Yes to all queries and do not prompt" echo "" - printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME install |||latest [-r ] [-OS ] [-a|-alias ] [-p|-persistent] [-f|-force] [-u|-unstable] [-g|-global] [-y]${RCol}" - echo " | install requested $_DNVM_RUNTIME_SHORT_NAME from feed" - echo " install requested $_DNVM_RUNTIME_SHORT_NAME from local package on filesystem" - echo " latest install latest version of $_DNVM_RUNTIME_SHORT_NAME from feed" - echo " -OS the operating system that the runtime targets (default:$(__dnvm_current_os)" - echo " -a|-alias set alias for requested $_DNVM_RUNTIME_SHORT_NAME on install" - echo " -p|-persistent set installed version as default" - echo " -f|force force install. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed" - echo " -u|unstable use unstable feed. Installs the $_DNVM_RUNTIME_SHORT_NAME from the unstable feed" - echo " -r|runtime The runtime flavor to install [mono or coreclr] (default: mono)" - echo " -g|global Installs to the configured global $_DNVM_RUNTIME_SHORT_NAME file location (default: /usr/local/lib/dnx current: $DNX_GLOBAL_HOME)" - echo " -y Assume Yes to all queries and do not prompt" + printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME install |||latest [-r ] [-OS ] [-alias ] [-a|-arch ] [-p|-persistent] [-f|-force] [-u|-unstable] [-g|-global] [-y]${RCol}" + echo " | install requested $_DNVM_RUNTIME_SHORT_NAME from feed" + echo " install requested $_DNVM_RUNTIME_SHORT_NAME from local package on filesystem" + echo " latest install latest version of $_DNVM_RUNTIME_SHORT_NAME from feed" + echo " -OS the operating system that the runtime targets (default:$(__dnvm_current_os))" + echo " -alias set alias for requested $_DNVM_RUNTIME_SHORT_NAME on install" + echo " -a|-arch architecture to use (x64)" + echo " -p|-persistent set installed version as default" + echo " -f|-force force install. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed" + echo " -u|-unstable use unstable feed. Installs the $_DNVM_RUNTIME_SHORT_NAME from the unstable feed" + echo " -r|-runtime runtime flavor to install [mono or coreclr] (default: mono)" + echo " -g|-global Installs to the configured global $_DNVM_RUNTIME_SHORT_NAME file location (default: /usr/local/lib/dnx current: $DNX_GLOBAL_HOME)" + echo " -y Assume Yes to all queries and do not prompt" echo "" echo " adds $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line" echo "" + printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME uninstall [-r|-runtime ] [-a|-arch ] [-OS ]${RCol}" + echo " the version to uninstall" + echo " -r|-runtime runtime flavor to uninstall [mono or coreclr] (default: mono)" + echo " -a|-arch architecture to use (x64)" + echo " -OS the operating system that the runtime targets (default:$(__dnvm_current_os))" + echo " -y Assume Yes to all queries and do not prompt" + echo "" printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME use |||none [-p|-persistent] [-r|-runtime ] [-a|-arch ] ${RCol}" echo " || add $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line " echo " none remove $_DNVM_RUNTIME_SHORT_NAME bin from path of current command line" echo " -p|-persistent set selected version as default" - echo " -r|-runtime runtime to use (mono, coreclr)" - echo " -a|-arch architecture to use (x64)" + echo " -r|-runtime runtime flavor to use [mono or coreclr] (default: mono)" + echo " -a|-arch architecture to use (x64)" echo "" printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME run | ${RCol}" echo " | the version or alias to run" @@ -472,10 +481,10 @@ __dnvm_help() { echo " display value of the specified alias" echo "" printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME alias || ${RCol}" - echo " the name of the alias to set" - echo " || the $_DNVM_RUNTIME_SHORT_NAME version to set the alias to. Alternatively use the version of the specified alias" + echo " the name of the alias to set" + echo " || the $_DNVM_RUNTIME_SHORT_NAME version to set the alias to. Alternatively use the version of the specified alias" echo "" - printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME unalias ${RCol}" + printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME alias [-d|-delete] ${RCol}" echo " remove the specified alias" echo "" printf "%b\n" "${Yel}$_DNVM_COMMAND_NAME [help|-h|-help|--help] ${RCol}" @@ -533,7 +542,7 @@ dnvm() do if [[ $1 == "-p" || $1 == "-persistent" ]]; then local persistent="-p" - elif [[ $1 == "-a" || $1 == "-alias" ]]; then + elif [[ $1 == "-alias" ]]; then local alias=$2 shift elif [[ $1 == "-f" || $1 == "-force" ]]; then @@ -546,9 +555,9 @@ dnvm() elif [[ $1 == "-OS" ]]; then local os=$2 shift - elif [[ $1 == "-y" ]]; then + elif [[ $1 == "-y" ]]; then local acceptSudo=1 - elif [[ $1 == "-arch" ]]; then + elif [[ $1 == "-a" || $1 == "-arch" ]]; then local arch=$2 shift @@ -660,7 +669,7 @@ dnvm() local useSudo= mkdir -p "$runtimeFolder" > /dev/null 2>&1 if [ ! -d $runtimeFolder ]; then - if ! __dnvm_promptSudo $acceptSudo ; then + if ! __dnvm_promptSudo $acceptSudo "In order to install dnx globally, dnvm will have to temporarily run as root." ; then useSudo=sudo sudo mkdir -p "$runtimeFolder" > /dev/null 2>&1 || return 1 else @@ -676,6 +685,79 @@ dnvm() fi ;; + "uninstall" ) + [[ $# -lt 2 ]] && __dnvm_help && return + shift + + local versionOrAlias= + local runtime= + local architecture= + local os= + local acceptSudo=0 + while [ $# -ne 0 ] + do + if [[ $1 == "-r" || $1 == "-runtime" ]]; then + local runtime=$2 + shift + elif [[ $1 == "-a" || $1 == "-arch" ]]; then + local architecture=$2 + shift + elif [[ $1 == "-OS" ]]; then + local os=$2 + shift + elif [[ $1 == "-y" ]]; then + local acceptSudo=1 + elif [[ -n $1 ]]; then + local versionOrAlias=$1 + fi + + shift + done + + if [[ -z $os ]]; then + os=$(__dnvm_current_os) + elif [[ $os == "osx" ]]; then + os="darwin" + fi + + if [[ -z $runtime ]]; then + runtime=$(__dnvm_os_runtime_defaults "$os") + fi + + if [[ -z $architecture ]]; then + architecture=$(__dnvm_runtime_bitness_defaults "$runtime") + fi + + # dnx-coreclr-linux-x64.1.0.0-beta7-12290 + local runtimeFullName=$(__dnvm_requested_version_or_alias "$versionOrAlias" "$runtime" "$architecture" "$os") + + for folder in `echo $DNX_HOME | tr ":" "\n"`; do + if [ -e "$folder/runtimes/$runtimeFullName" ]; then + local runtimeFolder="$folder/runtimes/$runtimeFullName" + fi + done + + if [[ -e $runtimeFolder ]]; then + if [[ $runtimeFolder == *"$DNX_GLOBAL_HOME"* ]] ; then + if ! __dnvm_promptSudo $acceptSudo "In order to uninstall a global dnx, dnvm will have to temporarily run as root." ; then + local useSudo=sudo + fi + fi + $useSudo rm -r $runtimeFolder + echo "Removed $runtimeFolder" + else + echo "$runtimeFolder is not installed" + fi + + if [ -d "$_DNVM_ALIAS_DIR" ]; then + for __dnvm_file in $(find "$_DNVM_ALIAS_DIR" -name *.alias); do + if [ $(cat $__dnvm_file) == "$runtimeFullName" ]; then + rm $__dnvm_file + fi + done + fi + ;; + "use"|"run"|"exec" ) [[ $1 == "use" && $# -lt 2 ]] && __dnvm_help && return @@ -795,6 +877,16 @@ dnvm() return fi shift + + if [[ $1 == "-d" || $1 == "-delete" ]]; then + local name=$2 + local aliasPath="$_DNVM_ALIAS_DIR/$name.alias" + [[ ! -e "$aliasPath" ]] && echo "Cannot remove alias, '$name' is not a valid alias name" && return 1 + echo "Removing alias $name" + rm "$aliasPath" >> /dev/null 2>&1 + return + fi + local name="$1" if [[ $# == 1 ]]; then @@ -836,10 +928,9 @@ dnvm() [[ $# -ne 2 ]] && __dnvm_help && return local name=$2 - local aliasPath="$_DNVM_ALIAS_DIR/$name.alias" - [[ ! -e "$aliasPath" ]] && echo "Cannot remove alias, '$name' is not a valid alias name" && return 1 - echo "Removing alias $name" - rm "$aliasPath" >> /dev/null 2>&1 + echo "This command has been deprecated. Use '$_DNVM_COMMAND_NAME alias -d' instead" + $_DNVM_COMMAND_NAME alias -d $name + return $? ;; "list" ) @@ -871,7 +962,6 @@ dnvm() # Z shell array-index starts at one. local i=1 - local format="%-20s %s\n" if [ -d "$_DNVM_ALIAS_DIR" ]; then for __dnvm_file in $(find "$_DNVM_ALIAS_DIR" -name *.alias); do if [ ! -d "$_DNVM_USER_PACKAGES/$(cat $__dnvm_file)" ] && [ ! -d "$_DNVM_GLOBAL_PACKAGES/$(cat $__dnvm_file)" ]; then