mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-30 17:25:51 +08:00 
			
		
		
		
	Add support for nvm use node, nvm use iojs, nvm ls node, and nvm ls iojs
				
					
				
			Also add `nvm_version node` and `nvm_version iojs` support.
This commit is contained in:
		
							
								
								
									
										75
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -200,10 +200,11 @@ nvm_version() { | |||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   VERSION="$(nvm_ls "$PATTERN" | tail -n1)" |   VERSION="$(nvm_ls "$PATTERN" | tail -n1)" | ||||||
|   echo "$VERSION" |   if [ -z "$VERSION" ] || [ "_$VERSION" = "_N/A" ]; then | ||||||
|  |     echo "N/A" | ||||||
|   if [ "$VERSION" = 'N/A' ]; then |     return 3; | ||||||
|     return 3 |   else | ||||||
|  |     echo "$VERSION" | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -278,7 +279,7 @@ nvm_binary_available() { | |||||||
|   # binaries started with node 0.8.6 |   # binaries started with node 0.8.6 | ||||||
|   local FIRST_VERSION_WITH_BINARY |   local FIRST_VERSION_WITH_BINARY | ||||||
|   FIRST_VERSION_WITH_BINARY="0.8.6" |   FIRST_VERSION_WITH_BINARY="0.8.6" | ||||||
|   nvm_version_greater_than_or_equal_to "$1" "$FIRST_VERSION_WITH_BINARY" |   nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix $1)" "$FIRST_VERSION_WITH_BINARY" | ||||||
| } | } | ||||||
|  |  | ||||||
| nvm_alias() { | nvm_alias() { | ||||||
| @@ -411,20 +412,31 @@ nvm_ls() { | |||||||
|     return |     return | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|  |   case "$PATTERN" in | ||||||
|  |     "$(nvm_iojs_prefix)" | "$(nvm_node_prefix)") | ||||||
|  |       PATTERN="$PATTERN-" | ||||||
|  |     ;; | ||||||
|  |     *) | ||||||
|  |       PATTERN=$(nvm_ensure_version_prefix $PATTERN) | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|   # If it looks like an explicit version, don't do anything funny |   # If it looks like an explicit version, don't do anything funny | ||||||
|   PATTERN=$(nvm_ensure_version_prefix $PATTERN) |  | ||||||
|   if [ "_$(echo "$PATTERN" | cut -c1-1)" = "_v" ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then |   if [ "_$(echo "$PATTERN" | cut -c1-1)" = "_v" ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then | ||||||
|     if [ -d "$(nvm_version_path "$PATTERN")" ]; then |     if [ -d "$(nvm_version_path "$PATTERN")" ]; then | ||||||
|       VERSIONS="$PATTERN" |       VERSIONS="$PATTERN" | ||||||
|     fi |     fi | ||||||
|   else |   else | ||||||
|     if [ "_$PATTERN" != "_system" ]; then |     case "$PATTERN" in | ||||||
|       local NUM_VERSION_GROUPS |       "$(nvm_iojs_prefix)-" | "$(nvm_node_prefix)-" | "system") | ||||||
|       NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")" |       ;; | ||||||
|       if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then |       *) | ||||||
|         PATTERN="$(echo "$PATTERN" | command sed -e 's/\.*$//g')." |         local NUM_VERSION_GROUPS | ||||||
|       fi |         NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")" | ||||||
|     fi |         if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then | ||||||
|  |           PATTERN="$(echo "$PATTERN" | command sed -e 's/\.*$//g')." | ||||||
|  |         fi | ||||||
|  |       ;; | ||||||
|  |     esac | ||||||
|  |  | ||||||
|     local ZHS_HAS_SHWORDSPLIT_UNSET |     local ZHS_HAS_SHWORDSPLIT_UNSET | ||||||
|     ZHS_HAS_SHWORDSPLIT_UNSET=1 |     ZHS_HAS_SHWORDSPLIT_UNSET=1 | ||||||
| @@ -435,11 +447,25 @@ nvm_ls() { | |||||||
|  |  | ||||||
|     local NVM_DIRS_TO_TEST_AND_SEARCH |     local NVM_DIRS_TO_TEST_AND_SEARCH | ||||||
|     local NVM_DIRS_TO_SEARCH |     local NVM_DIRS_TO_SEARCH | ||||||
|  |     local NVM_ADD_SYSTEM | ||||||
|  |     NVM_ADD_SYSTEM=false | ||||||
|     if nvm_is_iojs_version "$PATTERN"; then |     if nvm_is_iojs_version "$PATTERN"; then | ||||||
|       NVM_DIRS_TO_TEST_AND_SEARCH="$(nvm_version_dir iojs)" |       NVM_DIRS_TO_TEST_AND_SEARCH="$(nvm_version_dir iojs)" | ||||||
|       PATTERN="$(nvm_strip_iojs_prefix "$PATTERN")" |       PATTERN="$(nvm_strip_iojs_prefix "$PATTERN")" | ||||||
|  |       if nvm_has_system_iojs; then | ||||||
|  |         NVM_ADD_SYSTEM=true | ||||||
|  |       fi | ||||||
|  |     elif [ "_$PATTERN" = "_$(nvm_node_prefix)-" ]; then | ||||||
|  |       NVM_DIRS_TO_TEST_AND_SEARCH="$(nvm_version_dir old) $(nvm_version_dir new)" | ||||||
|  |       PATTERN='' | ||||||
|  |       if nvm_has_system_node; then | ||||||
|  |         NVM_ADD_SYSTEM=true | ||||||
|  |       fi | ||||||
|     else |     else | ||||||
|       NVM_DIRS_TO_TEST_AND_SEARCH="$(nvm_version_dir old) $(nvm_version_dir new) $(nvm_version_dir iojs)" |       NVM_DIRS_TO_TEST_AND_SEARCH="$(nvm_version_dir old) $(nvm_version_dir new) $(nvm_version_dir iojs)" | ||||||
|  |       if nvm_has_system_iojs || nvm_has_system_node; then | ||||||
|  |         NVM_ADD_SYSTEM=true | ||||||
|  |       fi | ||||||
|     fi |     fi | ||||||
|     for NVM_VERSION_DIR in $NVM_DIRS_TO_TEST_AND_SEARCH; do |     for NVM_VERSION_DIR in $NVM_DIRS_TO_TEST_AND_SEARCH; do | ||||||
|       if [ -d "$NVM_VERSION_DIR" ]; then |       if [ -d "$NVM_VERSION_DIR" ]; then | ||||||
| @@ -467,7 +493,7 @@ nvm_ls() { | |||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|   if nvm_has_system_node || nvm_has_system_iojs; then |   if [ "$NVM_ADD_SYSTEM" = true ]; then | ||||||
|     if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then |     if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then | ||||||
|       VERSIONS="$VERSIONS$(command printf '\n%s' 'system')" |       VERSIONS="$VERSIONS$(command printf '\n%s' 'system')" | ||||||
|     elif [ "$PATTERN" = 'system' ]; then |     elif [ "$PATTERN" = 'system' ]; then | ||||||
| @@ -1080,16 +1106,31 @@ nvm() { | |||||||
|         nvm help |         nvm help | ||||||
|         return 127 |         return 127 | ||||||
|       fi |       fi | ||||||
|  |  | ||||||
|       if [ $# -eq 1 ]; then |       if [ $# -eq 1 ]; then | ||||||
|         nvm_rc_version |         nvm_rc_version | ||||||
|         if [ -n "$NVM_RC_VERSION" ]; then |         if [ -n "$NVM_RC_VERSION" ]; then | ||||||
|           VERSION="$(nvm_version "$NVM_RC_VERSION")" |           VERSION="$(nvm_version "$NVM_RC_VERSION")" | ||||||
|         fi |         fi | ||||||
|       elif [ "_$2" != '_system' ]; then |  | ||||||
|         VERSION="$(nvm_version "$2")" |  | ||||||
|       else |       else | ||||||
|         VERSION="$2" |         local NVM_IOJS_PREFIX | ||||||
|  |         NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | ||||||
|  |         case "_$2" in | ||||||
|  |           "_$NVM_IOJS_PREFIX" | "_io.js") | ||||||
|  |             VERSION="$(nvm_add_iojs_prefix $(nvm_ls | command grep "$NVM_IOJS_PREFIX" | tail -n1))" | ||||||
|  |           ;; | ||||||
|  |           "_$(nvm_node_prefix)") | ||||||
|  |             VERSION="$(nvm_version stable)" | ||||||
|  |           ;; | ||||||
|  |           "_system") | ||||||
|  |             VERSION="system" | ||||||
|  |           ;; | ||||||
|  |           *) | ||||||
|  |             VERSION="$(nvm_version "$2")" | ||||||
|  |           ;; | ||||||
|  |         esac | ||||||
|       fi |       fi | ||||||
|  |  | ||||||
|       if [ -z "$VERSION" ]; then |       if [ -z "$VERSION" ]; then | ||||||
|         nvm help |         nvm help | ||||||
|         return 127 |         return 127 | ||||||
|   | |||||||
| @@ -2,6 +2,6 @@ | |||||||
| 
 | 
 | ||||||
| . ../../../nvm.sh | . ../../../nvm.sh | ||||||
| 
 | 
 | ||||||
| nvm ls node | nvm ls node_ | ||||||
| [ "$?" = "3" ] | [ "$?" = "3" ] | ||||||
| 
 | 
 | ||||||
							
								
								
									
										47
									
								
								test/fast/Unit tests/nvm_version
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								test/fast/Unit tests/nvm_version
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | die () { echo $@ ; cleanup ; exit 1; } | ||||||
|  | cleanup () { | ||||||
|  |   unset -f nvm_ls_current nvm_ls | ||||||
|  | } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | nvm_ls_current() { | ||||||
|  |   echo "CURRENT!" | ||||||
|  |   return 7 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_version current)" | ||||||
|  | EXPECTED_OUTPUT="CURRENT!" | ||||||
|  | EXIT_CODE="$(nvm_version current 2>&1 >/dev/null ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version current" did not return nvm_ls_current output' | ||||||
|  | [ "_$EXIT_CODE" = "_7" ] || die '"nvm_version current" did not return nvm_ls_current exit code' | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_version)" | ||||||
|  | EXPECTED_OUTPUT="CURRENT!" | ||||||
|  | EXIT_CODE="$(nvm_version 2>&1 >/dev/null ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return nvm_ls_current output' | ||||||
|  | [ "_$EXIT_CODE" = "_7" ] || die '"nvm_version" did not return nvm_ls_current exit code' | ||||||
|  |  | ||||||
|  | nvm_ls() { | ||||||
|  |   echo "line 1" | ||||||
|  |   echo "line 2" | ||||||
|  |   echo "pattern: $1" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | [ "_$(nvm_version foo)" = "_pattern: foo" ] || die '"nvm_version foo" did not pass the pattern to "nvm_ls", or return the last line' | ||||||
|  |  | ||||||
|  | nvm_ls() { echo "N/A"; } | ||||||
|  | OUTPUT="$(nvm_version foo)" | ||||||
|  | EXPECTED_OUTPUT="N/A" | ||||||
|  | EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns N/A' | ||||||
|  | [ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3' | ||||||
|  |  | ||||||
|  | nvm_ls() { echo; } | ||||||
|  | OUTPUT="$(nvm_version foo)" | ||||||
|  | EXPECTED_OUTPUT="N/A" | ||||||
|  | EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns nothing' | ||||||
|  | [ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3' | ||||||
							
								
								
									
										14
									
								
								test/slow/nvm use/Running "nvm use iojs" uses latest io.js version
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								test/slow/nvm use/Running "nvm use iojs" uses latest io.js version
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | die () { echo $@ ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | nvm deactivate 2>&1 >/dev/null || die 'deactivate failed' | ||||||
|  |  | ||||||
|  | nvm use iojs || die 'nvm use iojs failed' | ||||||
|  | OUTPUT="$(nvm current)" | ||||||
|  | EXPECTED_OUTPUT="iojs-v1.0.1" | ||||||
|  |  | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ | ||||||
|  |   || die "'nvm use iojs' + 'nvm current' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" | ||||||
							
								
								
									
										14
									
								
								test/slow/nvm use/Running "nvm use node" uses latest stable node version
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								test/slow/nvm use/Running "nvm use node" uses latest stable node version
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | die () { echo $@ ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | nvm deactivate 2>&1 >/dev/null || die 'deactivate failed' | ||||||
|  |  | ||||||
|  | nvm use node || die 'nvm use node failed' | ||||||
|  | OUTPUT="$(nvm current)" | ||||||
|  | EXPECTED_OUTPUT="$(nvm_version stable)" | ||||||
|  |  | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ | ||||||
|  |   || die "'nvm use node' + 'nvm current' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" | ||||||
							
								
								
									
										16
									
								
								test/slow/nvm use/setup_dir
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								test/slow/nvm use/setup_dir
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | mkdir -p ../../../.nvm_use_bak | ||||||
|  | if [ -d "../../../v*" ]; then | ||||||
|  |   mv "../../../v*" ../../../.nvm_use_bak/ | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | for VERSION in "0.8.7" "0.9.1" "0.10.1" "0.11.1"; do | ||||||
|  |   nvm install "v$VERSION" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | for VERSION in "1.0.0" "1.0.1"; do | ||||||
|  |   nvm install "iojs-v$VERSION" | ||||||
|  | done | ||||||
							
								
								
									
										16
									
								
								test/slow/nvm use/teardown_dir
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								test/slow/nvm use/teardown_dir
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | for VERSION in "0.8.7" "0.9.1" "0.10.1" "0.11.1"; do | ||||||
|  |   nvm uninstall "$VERSION" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | for VERSION in "1.0.0" "1.0.1"; do | ||||||
|  |   nvm uninstall "iojs-v$VERSION" | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if [ -d ../../../.nvm_use_bak/* ]; then | ||||||
|  |   mv ../../../.nvm_use_bak/* ../../../ | ||||||
|  | fi | ||||||
|  | rmdir ../../../.nvm_use_bak | ||||||
		Reference in New Issue
	
	Block a user