mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +08:00 
			
		
		
		
	[Fix] default_packages: work when the file lacks a trailing newline
				
					
				
			Fixes #1995.
This commit is contained in:
		
							
								
								
									
										10
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -3495,12 +3495,18 @@ nvm() { | |||||||
| } | } | ||||||
|  |  | ||||||
| nvm_get_default_packages() { | nvm_get_default_packages() { | ||||||
|   if [ -f "${NVM_DIR}/default-packages" ]; then |   local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages" | ||||||
|  |   if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then | ||||||
|     local DEFAULT_PACKAGES |     local DEFAULT_PACKAGES | ||||||
|     DEFAULT_PACKAGES='' |     DEFAULT_PACKAGES='' | ||||||
|  |  | ||||||
|     # Read lines from $NVM_DIR/default-packages |     # Read lines from $NVM_DIR/default-packages | ||||||
|     local line |     local line | ||||||
|  |     # ensure a trailing newline | ||||||
|  |     WORK=$(mktemp -d) || exit $? | ||||||
|  |     trap "rm -rf '$WORK'" EXIT | ||||||
|  |     # shellcheck disable=SC1003 | ||||||
|  |     sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages" | ||||||
|     while IFS=' ' read -r line; do |     while IFS=' ' read -r line; do | ||||||
|       # Skip empty lines. |       # Skip empty lines. | ||||||
|       [ -n "${line-}" ] || continue |       [ -n "${line-}" ] || continue | ||||||
| @@ -3517,7 +3523,7 @@ nvm_get_default_packages() { | |||||||
|       esac |       esac | ||||||
|  |  | ||||||
|       DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} " |       DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} " | ||||||
|     done < "${NVM_DIR}/default-packages" |     done < "${WORK}/default-packages" | ||||||
|     echo "${DEFAULT_PACKAGES}" | xargs |     echo "${DEFAULT_PACKAGES}" | xargs | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
|   | |||||||
| @@ -52,6 +52,21 @@ cleanup | |||||||
|  |  | ||||||
| setup | setup | ||||||
|  |  | ||||||
|  | cat > $FILE << EOF | ||||||
|  | rimraf | ||||||
|  | not~a~package~name | ||||||
|  | mkdirp | ||||||
|  | EOF | ||||||
|  | printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline | ||||||
|  |  | ||||||
|  | DEFAULT_PKGS="$(nvm_get_default_packages)" | ||||||
|  | EXPECTED_PKGS='rimraf not~a~package~name mkdirp' | ||||||
|  | [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "3: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" | ||||||
|  |  | ||||||
|  | cleanup | ||||||
|  |  | ||||||
|  | setup | ||||||
|  |  | ||||||
| cat > $FILE << EOF | cat > $FILE << EOF | ||||||
| object-inspect @ 1.0.2 | object-inspect @ 1.0.2 | ||||||
| rimraf | rimraf | ||||||
| @@ -59,7 +74,7 @@ EOF | |||||||
|  |  | ||||||
| DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)" | DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)" | ||||||
| EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values." | EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values." | ||||||
| [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "3: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" | [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" | ||||||
|  |  | ||||||
| cleanup | cleanup | ||||||
|  |  | ||||||
| @@ -69,7 +84,7 @@ rm -rf $FILE | |||||||
|  |  | ||||||
| DEFAULT_PKGS="$(nvm_get_default_packages)" | DEFAULT_PKGS="$(nvm_get_default_packages)" | ||||||
| EXPECTED_PKGS='' | EXPECTED_PKGS='' | ||||||
| [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" | [ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<" | ||||||
|  |  | ||||||
| touch $FILE | touch $FILE | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,8 +30,11 @@ object-inspect@1.0.2 | |||||||
| # commented-package | # commented-package | ||||||
|  |  | ||||||
| stevemao/left-pad | stevemao/left-pad | ||||||
|  | daytime | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
|  | printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline | ||||||
|  |  | ||||||
| nvm install v6.10.1 2>&1 | nvm install v6.10.1 2>&1 | ||||||
| EXIT_CODE=$? | EXIT_CODE=$? | ||||||
| [ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE" | [ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE" | ||||||
| @@ -41,6 +44,11 @@ if [ -z "$?" ]; then | |||||||
|   die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'' to exit with 0, got $?" |   die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'' to exit with 0, got $?" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime' | ||||||
|  | if [ -z "$?" ]; then | ||||||
|  |   die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime'' to exit with 0, got $?" | ||||||
|  | fi | ||||||
|  |  | ||||||
| cleanup | cleanup | ||||||
|  |  | ||||||
| setup | setup | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user