22# Source this file from your .bash-profile or script to use
33
44# "Constants"
5- _DNVM_BUILDNUMBER=" beta5-10357 "
5+ _DNVM_BUILDNUMBER=" beta5-10358 "
66_DNVM_AUTHORS=" Microsoft Open Technologies, Inc."
77_DNVM_RUNTIME_PACKAGE_NAME=" dnx"
88_DNVM_RUNTIME_FRIENDLY_NAME=" .NET Execution Environment"
@@ -11,9 +11,26 @@ _DNVM_RUNTIME_FOLDER_NAME=".dnx"
1111_DNVM_COMMAND_NAME=" dnvm"
1212_DNVM_VERSION_MANAGER_NAME=" .NET Version Manager"
1313_DNVM_DEFAULT_FEED=" https://www.myget.org/F/aspnetvnext/api/v2"
14+ _DNVM_UPDATE_LOCATION=" https://raw.githubusercontent.com/aspnet/Home/dev/dnvm.sh"
1415_DNVM_HOME_VAR_NAME=" DNX_HOME"
1516
16- [ " $_DNVM_BUILDNUMBER " = " {{*" ] && _DNVM_BUILDNUMBER=" HEAD"
17+ if [ " $NO_COLOR " != " 1" ]; then
18+ # ANSI Colors
19+ RCol=' \e[0m' # Text Reset
20+
21+ # Regular Bold Underline High Intensity BoldHigh Intens Background High Intensity Backgrounds
22+ Bla=' \e[0;30m' ; BBla=' \e[1;30m' ; UBla=' \e[4;30m' ; IBla=' \e[0;90m' ; BIBla=' \e[1;90m' ; On_Bla=' \e[40m' ; On_IBla=' \e[0;100m' ;
23+ Red=' \e[0;31m' ; BRed=' \e[1;31m' ; URed=' \e[4;31m' ; IRed=' \e[0;91m' ; BIRed=' \e[1;91m' ; On_Red=' \e[41m' ; On_IRed=' \e[0;101m' ;
24+ Gre=' \e[0;32m' ; BGre=' \e[1;32m' ; UGre=' \e[4;32m' ; IGre=' \e[0;92m' ; BIGre=' \e[1;92m' ; On_Gre=' \e[42m' ; On_IGre=' \e[0;102m' ;
25+ Yel=' \e[0;33m' ; BYel=' \e[1;33m' ; UYel=' \e[4;33m' ; IYel=' \e[0;93m' ; BIYel=' \e[1;93m' ; On_Yel=' \e[43m' ; On_IYel=' \e[0;103m' ;
26+ Blu=' \e[0;34m' ; BBlu=' \e[1;34m' ; UBlu=' \e[4;34m' ; IBlu=' \e[0;94m' ; BIBlu=' \e[1;94m' ; On_Blu=' \e[44m' ; On_IBlu=' \e[0;104m' ;
27+ Pur=' \e[0;35m' ; BPur=' \e[1;35m' ; UPur=' \e[4;35m' ; IPur=' \e[0;95m' ; BIPur=' \e[1;95m' ; On_Pur=' \e[45m' ; On_IPur=' \e[0;105m' ;
28+ Cya=' \e[0;36m' ; BCya=' \e[1;36m' ; UCya=' \e[4;36m' ; ICya=' \e[0;96m' ; BICya=' \e[1;96m' ; On_Cya=' \e[46m' ; On_ICya=' \e[0;106m' ;
29+ Whi=' \e[0;37m' ; BWhi=' \e[1;37m' ; UWhi=' \e[4;37m' ; IWhi=' \e[0;97m' ; BIWhi=' \e[1;97m' ; On_Whi=' \e[47m' ; On_IWhi=' \e[0;107m' ;
30+ fi
31+
32+
33+ [[ " $_DNVM_BUILDNUMBER " = {{* ]] && _DNVM_BUILDNUMBER=" HEAD"
1734
1835__dnvm_has () {
1936 type " $1 " > /dev/null 2>&1
3047
3148_DNVM_USER_PACKAGES=" $DNX_USER_HOME /runtimes"
3249_DNVM_ALIAS_DIR=" $DNX_USER_HOME /alias"
50+ _DNVM_DNVM_DIR=" $DNX_USER_HOME /dnvm"
3351
3452if [ -z " $DNX_FEED " ]; then
3553 DNX_FEED=" $_DNVM_DEFAULT_FEED "
@@ -39,7 +57,7 @@ __dnvm_find_latest() {
3957 local platform=" mono"
4058
4159 if ! __dnvm_has " curl" ; then
42- echo " $ _DNVM_COMMAND_NAME needs curl to proceed." >&2 ;
60+ printf " %b\n " " ${Red} $ _DNVM_COMMAND_NAME needs curl to proceed. ${RCol} " >&2 ;
4361 return 1
4462 fi
4563
@@ -77,33 +95,57 @@ __dnvm_package_runtime() {
7795 echo " $runtimeFullName " | sed " s/$_DNVM_RUNTIME_PACKAGE_NAME -\([^.-]*\).*/\1/"
7896}
7997
98+ __dnvm_update_self () {
99+ local dnvmFileLocation=" $_DNVM_DNVM_DIR /dnvm.sh"
100+ if [ ! -e $dnvmFileLocation ]; then
101+ local formattedDnvmFileLocation=` (echo $dnvmFileLocation | sed s=$HOME =~ =g)`
102+ local formattedDnvmHome=` (echo $_DNVM_DNVM_DIR | sed s=$HOME =~ =g)`
103+ printf " %b\n" " ${Red} $formattedDnvmFileLocation doesn't exist. This command assumes you have installed dnvm in the usual location and are trying to update it. If you want to use update-self then dnvm.sh should be sourced from $formattedDnvmHome ${RCol} "
104+ return 1
105+ fi
106+ printf " %b\n" " ${Cya} Downloading dnvm.sh from $_DNVM_UPDATE_LOCATION ${RCol} "
107+ local httpResult=$( curl -L -D - " $_DNVM_UPDATE_LOCATION " -o " $dnvmFileLocation " -# | grep " ^HTTP/1.1" | head -n 1 | sed " s/HTTP.1.1 \([0-9]*\).*/\1/" )
108+
109+ [[ $httpResult == " 404" ]] && printf " %b\n" " ${Red} 404. Unable to download DNVM from $_DNVM_UPDATE_LOCATION ${RCol} " && return 1
110+ [[ $httpResult != " 302" && $httpResult != " 200" ]] && echo " ${Red} HTTP Error $httpResult fetching DNVM from $_DNVM_UPDATE_LOCATION ${RCol} " && return 1
111+
112+ source " $dnvmFileLocation "
113+ }
114+
80115__dnvm_download () {
81116 local runtimeFullName=" $1 "
82117 local runtimeFolder=" $2 "
118+ local force=" $3 "
83119
84120 local pkgName=$( __dnvm_package_name " $runtimeFullName " )
85121 local pkgVersion=$( __dnvm_package_version " $runtimeFullName " )
86122 local url=" $DNX_FEED /package/$pkgName /$pkgVersion "
87123 local runtimeFile=" $runtimeFolder /$runtimeFullName .nupkg"
88124
125+ if [ -n " $force " ]; then
126+ printf " %b\n" " ${Yel} Forcing download by deleting $runtimeFolder directory ${RCol} "
127+ rm -rf " $runtimeFolder "
128+ fi
129+
89130 if [ -e " $runtimeFolder " ]; then
90- echo " $runtimeFullName already installed."
131+ printf " %b\n " " ${Gre} $ runtimeFullName already installed. ${RCol} "
91132 return 0
92133 fi
93-
94- echo " Downloading $runtimeFullName from $DNX_FEED "
95-
134+
96135 if ! __dnvm_has " curl" ; then
97- echo " $_DNVM_COMMAND_NAME needs curl to proceed." >&2 ;
136+ printf " %b\n " " ${Red} $ _DNVM_COMMAND_NAME needs curl to proceed. ${RCol} " >&2 ;
98137 return 1
99138 fi
100139
101140 mkdir -p " $runtimeFolder " > /dev/null 2>&1
102141
103- local httpResult=$( curl -L -D - " $url " -o " $runtimeFile " 2> /dev/null | grep " ^HTTP/1.1" | head -n 1 | sed " s/HTTP.1.1 \([0-9]*\).*/\1/" )
142+ echo " Downloading $runtimeFullName from $DNX_FEED "
143+ echo " Download: $url "
144+
145+ local httpResult=$( curl -L -D - " $url " -o " $runtimeFile " -# | grep " ^HTTP/1.1" | head -n 1 | sed " s/HTTP.1.1 \([0-9]*\).*/\1/" )
104146
105- [[ $httpResult == " 404" ]] && echo " $runtimeFullName was not found in repository $DNX_FEED " && return 1
106- [[ $httpResult != " 302" && $httpResult != " 200" ]] && echo " HTTP Error $httpResult fetching $runtimeFullName from $DNX_FEED " && return 1
147+ [[ $httpResult == " 404" ]] && printf " %b\n " " ${Red} $ runtimeFullName was not found in repository $DNX_FEED ${RCol} " && return 1
148+ [[ $httpResult != " 302" && $httpResult != " 200" ]] && echo " ${Red} HTTP Error $httpResult fetching $runtimeFullName from $DNX_FEED ${RCol} " && return 1
107149
108150 __dnvm_unpack $runtimeFile $runtimeFolder
109151 return $?
@@ -163,47 +205,65 @@ __dnvm_locate_runtime_bin_from_full_name() {
163205 [ -e " $_DNVM_USER_PACKAGES /$runtimeFullName /bin" ] && echo " $_DNVM_USER_PACKAGES /$runtimeFullName /bin" && return
164206}
165207
208+ __echo_art () {
209+ printf " %b" " ${Cya} "
210+ echo " ___ _ ___ ____ ___"
211+ echo " / _ \/ |/ / | / / |/ /"
212+ echo " / // / /| |/ / /|_/ / "
213+ echo " /____/_/|_/ |___/_/ /_/ "
214+ printf " %b" " ${RCol} "
215+ }
216+
166217__dnvm_help () {
218+ __echo_art
167219 echo " "
168220 echo " $_DNVM_VERSION_MANAGER_NAME - Version 1.0.0-$_DNVM_BUILDNUMBER "
169- [ " $_DNVM_AUTHORS " != " {{*" ] && echo " By $_DNVM_AUTHORS "
221+ [[ " $_DNVM_AUTHORS " != {{* ] ] && echo " By $_DNVM_AUTHORS "
170222 echo " "
171- echo " USAGE: $_DNVM_COMMAND_NAME <command> [options]"
223+ printf " %b\n " " ${Cya} USAGE:${Yel} $_DNVM_COMMAND_NAME <command> [options] ${RCol} \n "
172224 echo " "
173- echo " $_DNVM_COMMAND_NAME upgrade"
174- echo " install latest $_DNVM_RUNTIME_SHORT_NAME from feed"
175- echo " add $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line"
176- echo " set installed version as default"
225+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME upgrade [-f|-force] ${RCol} "
226+ echo " install latest $_DNVM_RUNTIME_SHORT_NAME from feed"
227+ echo " adds $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line"
228+ echo " set installed version as default"
229+ echo " -f|forces force upgrade. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed"
177230 echo " "
178- echo " $_DNVM_COMMAND_NAME install <semver>|<alias>|<nupkg>|latest [-a|-alias <alias>] [-p -persistent]"
179- echo " <semver>|<alias> install requested $_DNVM_RUNTIME_SHORT_NAME from feed"
180- echo " <nupkg> install requested $_DNVM_RUNTIME_SHORT_NAME from local package on filesystem"
181- echo " latest install latest version of $_DNVM_RUNTIME_SHORT_NAME from feed"
182- echo " -a|-alias <alias> set alias <alias> for requested $_DNVM_RUNTIME_SHORT_NAME on install"
183- echo " -p -persistent set installed version as default"
184- echo " add $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line "
231+ printf " %b\n " " ${Yel} $ _DNVM_COMMAND_NAME install <semver>|<alias>|<nupkg>|latest [-a|-alias <alias>] [-p| -persistent] [-f|-force] ${RCol} "
232+ echo " <semver>|<alias> install requested $_DNVM_RUNTIME_SHORT_NAME from feed"
233+ echo " <nupkg> install requested $_DNVM_RUNTIME_SHORT_NAME from local package on filesystem"
234+ echo " latest install latest version of $_DNVM_RUNTIME_SHORT_NAME from feed"
235+ echo " -a|-alias <alias> set alias <alias> for requested $_DNVM_RUNTIME_SHORT_NAME on install"
236+ echo " -p| -persistent set installed version as default"
237+ echo " -f|force force install. Overwrite existing version of $_DNVM_RUNTIME_SHORT_NAME if already installed "
185238 echo " "
186- echo " $_DNVM_COMMAND_NAME use <semver>|<alias>|<package>|none [-p -persistent]"
187- echo " <semver>|<alias>|<package> add $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line "
188- echo " none remove $_DNVM_RUNTIME_SHORT_NAME bin from path of current command line"
189- echo " -p -persistent set selected version as default"
239+ echo " adds $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line"
190240 echo " "
191- echo " $_DNVM_COMMAND_NAME list"
192- echo " list $_DNVM_RUNTIME_SHORT_NAME versions installed "
241+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME use <semver>|<alias>|<package>|none [-p -persistent] ${RCol} "
242+ echo " <semver>|<alias>|<package> add $_DNVM_RUNTIME_SHORT_NAME bin to path of current command line "
243+ echo " none remove $_DNVM_RUNTIME_SHORT_NAME bin from path of current command line"
244+ echo " -p|-persistent set selected version as default"
193245 echo " "
194- echo " $_DNVM_COMMAND_NAME alias "
195- echo " list $_DNVM_RUNTIME_SHORT_NAME aliases which have been defined "
246+ printf " %b\n " " ${Yel} $ _DNVM_COMMAND_NAME list ${RCol} "
247+ echo " list $_DNVM_RUNTIME_SHORT_NAME versions installed "
196248 echo " "
197- echo " $_DNVM_COMMAND_NAME alias <alias> "
198- echo " display value of the specified alias "
249+ printf " %b\n " " ${Yel} $ _DNVM_COMMAND_NAME alias ${RCol} "
250+ echo " list $_DNVM_RUNTIME_SHORT_NAME aliases which have been defined "
199251 echo " "
200- echo " $_DNVM_COMMAND_NAME alias <alias> <semver>|<alias>|<package>"
201- echo " <alias> the name of the alias to set"
202- echo " <semver>|<alias>|<package> the $_DNVM_RUNTIME_SHORT_NAME version to set the alias to. Alternatively use the version of the specified alias"
252+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME alias <alias> ${RCol} "
253+ echo " display value of the specified alias"
203254 echo " "
204- echo " $_DNVM_COMMAND_NAME unalias <alias>"
205- echo " remove the specified alias"
255+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME alias <alias> <semver>|<alias>|<package> ${RCol} "
256+ echo " <alias> the name of the alias to set"
257+ echo " <semver>|<alias>|<package> the $_DNVM_RUNTIME_SHORT_NAME version to set the alias to. Alternatively use the version of the specified alias"
206258 echo " "
259+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME unalias <alias> ${RCol} "
260+ echo " remove the specified alias"
261+ echo " "
262+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME [help|-h|-help|--help] ${RCol} "
263+ echo " displays this help text."
264+ echo " "
265+ printf " %b\n" " ${Yel} $_DNVM_COMMAND_NAME update-self ${RCol} "
266+ echo " updates dnvm itself."
207267}
208268
209269dnvm ()
@@ -214,13 +274,17 @@ dnvm()
214274 fi
215275
216276 case $1 in
217- " help" )
277+ " help" | " -h " | " -help " | " --help " )
218278 __dnvm_help
219279 ;;
220280
281+ " update-self" )
282+ __dnvm_update_self
283+ ;;
284+
221285 " upgrade" )
222- [ $# -ne 1 ] && __dnvm_help && return
223- $_DNVM_COMMAND_NAME install latest -p
286+ shift
287+ $_DNVM_COMMAND_NAME install latest -p $1
224288 ;;
225289
226290 " install" )
@@ -229,25 +293,34 @@ dnvm()
229293 local persistent=
230294 local versionOrAlias=
231295 local alias=
296+ local force=
232297 while [ $# -ne 0 ]
233298 do
234299 if [[ $1 == " -p" || $1 == " -persistent" ]]; then
235300 local persistent=" -p"
236301 elif [[ $1 == " -a" || $1 == " -alias" ]]; then
237302 local alias=$2
238303 shift
304+ elif [[ $1 == " -f" || $1 == " -force" ]]; then
305+ local force=" -f"
239306 elif [[ -n $1 ]]; then
240307 [[ -n $versionOrAlias ]] && echo " Invalid option $1 " && __dnvm_help && return 1
241308 local versionOrAlias=$1
242309 fi
243310 shift
244311 done
312+
313+ if ! __dnvm_has " mono" ; then
314+ printf " %b\n" " ${Yel} It appears you don't have Mono available. Remember to get Mono before trying to run $DNVM_RUNTIME_SHORT_NAME application. ${RCol} " >&2 ;
315+ fi
316+
245317 if [[ " $versionOrAlias " == " latest" ]]; then
246318 echo " Determining latest version"
247319 versionOrAlias=$( __dnvm_find_latest)
248320 [[ $? == 1 ]] && echo " Error: Could not find latest version from feed $DNX_FEED " && return 1
249- echo " Latest version is $versionOrAlias "
321+ printf " %b\n " " Latest version is ${Cya} $ versionOrAlias ${RCol} "
250322 fi
323+
251324 if [[ " $versionOrAlias " == * .nupkg ]]; then
252325 local runtimeFullName=$( basename $versionOrAlias | sed " s/\(.*\)\.nupkg/\1/" )
253326 local runtimeVersion=$( __dnvm_package_version " $runtimeFullName " )
@@ -267,7 +340,7 @@ dnvm()
267340 else
268341 local runtimeFullName=" $( __dnvm_requested_version_or_alias $versionOrAlias ) "
269342 local runtimeFolder=" $_DNVM_USER_PACKAGES /$runtimeFullName "
270- __dnvm_download " $runtimeFullName " " $runtimeFolder "
343+ __dnvm_download " $runtimeFullName " " $runtimeFolder " " $force "
271344 [[ $? == 1 ]] && return 1
272345 $_DNVM_COMMAND_NAME use " $versionOrAlias " " $persistent "
273346 [[ -n $alias ]] && $_DNVM_COMMAND_NAME alias " $alias " " $versionOrAlias "
0 commit comments