mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +08:00 
			
		
		
		
	Refactor and create nvm_remote_versions and nvm_remote_version.
				
					
				
			Fixes #620 - an oh-my-zsh issue where `nvm install v1` didn't work.
This commit is contained in:
		
							
								
								
									
										58
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -217,18 +217,52 @@ nvm_remote_version() { | |||||||
|   local PATTERN |   local PATTERN | ||||||
|   PATTERN="$1" |   PATTERN="$1" | ||||||
|   local VERSION |   local VERSION | ||||||
|   if nvm_is_iojs_version "$PATTERN"; then |   if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then | ||||||
|     VERSION="$(nvm_ls_remote_iojs "$PATTERN")" |     VERSIONS="$(nvm_ls_remote "$PATTERN")" | ||||||
|   else |   else | ||||||
|     VERSION="$(nvm_ls_remote "$PATTERN")" |     case "_$PATTERN" in | ||||||
|  |       "_$(nvm_node_prefix)") | ||||||
|  |         VERSION="$(nvm_ls_remote stable)" | ||||||
|  |       ;; | ||||||
|  |       *) | ||||||
|  |         VERSION="$(nvm_remote_versions "$PATTERN" | tail -n1)" | ||||||
|  |       ;; | ||||||
|  |     esac | ||||||
|   fi |   fi | ||||||
|   echo "$VERSION" | tail -n1 |   echo "$VERSION" | ||||||
|  |  | ||||||
|   if [ "_$VERSION" = '_N/A' ]; then |   if [ "_$VERSION" = '_N/A' ]; then | ||||||
|     return 3 |     return 3 | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | nvm_remote_versions() { | ||||||
|  |   local PATTERN | ||||||
|  |   PATTERN="$1" | ||||||
|  |   if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then | ||||||
|  |     echo >&2 "Implicit aliases are not supported in nvm_remote_versions." | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |   case "_$PATTERN" in | ||||||
|  |     "_$(nvm_iojs_prefix)" | "_io.js") | ||||||
|  |       VERSIONS="$(nvm_ls_remote_iojs)" | ||||||
|  |     ;; | ||||||
|  |     "_$(nvm_node_prefix)") | ||||||
|  |       VERSIONS="$(nvm_ls_remote)" | ||||||
|  |     ;; | ||||||
|  |     *) | ||||||
|  |       VERSIONS="$(echo "$(nvm_ls_remote "$PATTERN") | ||||||
|  | $(nvm_ls_remote_iojs "$PATTERN")" | command grep -v "N/A" | command sed '/^$/d')" | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  |  | ||||||
|  |   if [ -z "$VERSIONS" ]; then | ||||||
|  |     echo "N/A" | ||||||
|  |     return 3 | ||||||
|  |   else | ||||||
|  |     echo "$VERSIONS" | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
| nvm_normalize_version() { | nvm_normalize_version() { | ||||||
|   echo "$1" | command sed -e 's/^v//' | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' |   echo "$1" | command sed -e 's/^v//' | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }' | ||||||
| } | } | ||||||
| @@ -951,17 +985,7 @@ nvm() { | |||||||
|         shift |         shift | ||||||
|       fi |       fi | ||||||
|  |  | ||||||
|       case "_$provided_version" in |  | ||||||
|         "_$(nvm_iojs_prefix)" | "_io.js") |  | ||||||
|           VERSION="$(nvm_add_iojs_prefix $(nvm_ls_remote_iojs | tail -n1))" |  | ||||||
|         ;; |  | ||||||
|         "_$(nvm_node_prefix)") |  | ||||||
|           VERSION="$(nvm_ls_remote stable)" |  | ||||||
|         ;; |  | ||||||
|         *) |  | ||||||
|       VERSION="$(nvm_remote_version "$provided_version")" |       VERSION="$(nvm_remote_version "$provided_version")" | ||||||
|         ;; |  | ||||||
|       esac |  | ||||||
|  |  | ||||||
|       if [ "_$VERSION" = "_N/A" ]; then |       if [ "_$VERSION" = "_N/A" ]; then | ||||||
|         echo "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." >&2 |         echo "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." >&2 | ||||||
| @@ -1324,7 +1348,7 @@ nvm() { | |||||||
|  |  | ||||||
|       local NVM_OUTPUT |       local NVM_OUTPUT | ||||||
|       NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_OUTPUT |       NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_OUTPUT | ||||||
| $NVM_LS_REMOTE_IOJS_OUTPUT" | grep -v "N/A" | sed '/^$/d')" | $NVM_LS_REMOTE_IOJS_OUTPUT" | command grep -v "N/A" | sed '/^$/d')" | ||||||
|       if [ -n "$NVM_OUTPUT" ]; then |       if [ -n "$NVM_OUTPUT" ]; then | ||||||
|         nvm_print_versions "$NVM_OUTPUT" |         nvm_print_versions "$NVM_OUTPUT" | ||||||
|         return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE |         return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE | ||||||
| @@ -1481,7 +1505,7 @@ $NVM_LS_REMOTE_IOJS_OUTPUT" | grep -v "N/A" | sed '/^$/d')" | |||||||
|         nvm_iojs_prefix nvm_node_prefix \ |         nvm_iojs_prefix nvm_node_prefix \ | ||||||
|         nvm_add_iojs_prefix nvm_strip_iojs_prefix \ |         nvm_add_iojs_prefix nvm_strip_iojs_prefix \ | ||||||
|         nvm_is_iojs_version \ |         nvm_is_iojs_version \ | ||||||
|         nvm_ls_remote nvm_ls nvm_remote_version \ |         nvm_ls_remote nvm_ls nvm_remote_version nvm_remote_versions \ | ||||||
|         nvm_version nvm_rc_version \ |         nvm_version nvm_rc_version \ | ||||||
|         nvm_version_greater nvm_version_greater_than_or_equal_to \ |         nvm_version_greater nvm_version_greater_than_or_equal_to \ | ||||||
|         nvm_supports_source_options > /dev/null 2>&1 |         nvm_supports_source_options > /dev/null 2>&1 | ||||||
|   | |||||||
							
								
								
									
										78
									
								
								test/fast/Unit tests/nvm_remote_versions
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										78
									
								
								test/fast/Unit tests/nvm_remote_versions
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | die () { echo $@ ; cleanup ; exit 1; } | ||||||
|  |  | ||||||
|  | cleanup() { | ||||||
|  |   unset -f nvm_ls_remote nvm_ls_remote_iojs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions stable 2>&1)" | ||||||
|  | EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions." | ||||||
|  | EXIT_CODE="$(nvm_remote_versions stable >/dev/null 2>&1; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'stable' did not error out with correct message, got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'stable' did not exit with code 1, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions unstable 2>&1)" | ||||||
|  | EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions." | ||||||
|  | EXIT_CODE="$(nvm_remote_versions unstable >/dev/null 2>&1; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'unstable' did not error out with correct message, got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'unstable' did not exit with code 1, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | nvm_ls_remote() { | ||||||
|  |   echo "N/A" | ||||||
|  | } | ||||||
|  | OUTPUT="$(nvm_remote_versions foo)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" | ||||||
|  | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | nvm_ls_remote_iojs() { | ||||||
|  |   echo "N/A" | ||||||
|  | } | ||||||
|  | OUTPUT="$(nvm_remote_versions iojs-foo)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" | ||||||
|  | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | nvm_ls_remote() { | ||||||
|  |   echo "test output" | ||||||
|  |   echo "more test output" | ||||||
|  |   echo "pattern received: _$1_" | ||||||
|  | } | ||||||
|  | nvm_ls_remote_iojs() { | ||||||
|  |   echo "test iojs output" | ||||||
|  |   echo "more iojs test output" | ||||||
|  |   echo "iojs pattern received: _$1_" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions foo)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$(nvm_ls_remote foo) | ||||||
|  | $(nvm_ls_remote_iojs foo)" ] \ | ||||||
|  |   || die "nvm_remote_versions foo did not return contents of nvm_ls_remote foo combined with nvm_ls_remote_iojs foo; got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions foo did not exit with 0, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions node)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions node >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$(nvm_ls_remote)" ] \ | ||||||
|  |   || die "nvm_remote_versions node did not return contents of nvm_ls_remote; got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions node did not exit with 0, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions iojs-foo)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$(nvm_ls_remote iojs-foo) | ||||||
|  | $(nvm_ls_remote_iojs iojs-foo)" ] \ | ||||||
|  |   || die "nvm_remote_versions iojs-foo did not return contents of nvm_ls_remote iojs-foo combined with nvm_ls_remote_iojs iojs-foo; got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs-foo did not exit with 0, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | OUTPUT="$(nvm_remote_versions iojs)" | ||||||
|  | EXIT_CODE="$(nvm_remote_versions iojs >/dev/null 2>&1 ; echo $?)" | ||||||
|  | [ "_$OUTPUT" = "_$(nvm_ls_remote_iojs)" ] \ | ||||||
|  |   || die "nvm_remote_versions iojs did not return contents of nvm_ls_remote_iojs; got $OUTPUT" | ||||||
|  | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs did not exit with 0, got $EXIT_CODE" | ||||||
|  |  | ||||||
|  | cleanup | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								test/installation/io.js/nvm install v1 works
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								test/installation/io.js/nvm install v1 works
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | die () { echo $@ ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | NVM_VERSION="v1" | ||||||
|  | NVM_PREFIXED_TEST_VERSION="$(nvm ls-remote "$NVM_VERSION" | tail -n1 | sed 's/^[    ]*//;s/[        ]*$//')" | ||||||
|  | NVM_TEST_VERSION="$(nvm_strip_iojs_prefix "$NVM_PREFIXED_TEST_VERSION")" | ||||||
|  |  | ||||||
|  | # Remove the stuff we're clobbering. | ||||||
|  | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION | ||||||
|  |  | ||||||
|  | # Install from binary | ||||||
|  | nvm install "$NVM_VERSION" || die "nvm install $NVM_VERSION failed" | ||||||
|  |  | ||||||
|  | # Check | ||||||
|  | [ -d ../../../versions/io.js/$NVM_TEST_VERSION ] | ||||||
|  | nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user