mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 18:25:52 +08:00 
			
		
		
		
	Add nvm_compare_checksum, nvm_compute_checksum, and nvm_get_checksum
				
					
				
			This commit is contained in:
		
							
								
								
									
										95
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -1036,6 +1036,94 @@ nvm_get_checksum_alg() { | |||||||
|   fi |   fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | nvm_compute_checksum() { | ||||||
|  |   local FILE | ||||||
|  |   FILE="${1-}" | ||||||
|  |   if [ -z "${FILE}" ]; then | ||||||
|  |     nvm_err 'Provided file to checksum is empty.' | ||||||
|  |     return 2 | ||||||
|  |   elif ! [ -f "${FILE}" ]; then | ||||||
|  |     nvm_err 'Provided file to checksum does not exist.' | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   if nvm_has "sha256sum" && ! nvm_is_alias "sha256sum"; then | ||||||
|  |     nvm_err 'Computing checksum with sha256sum' | ||||||
|  |     command sha256sum "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then | ||||||
|  |     nvm_err 'Computing checksum with shasum -a 256' | ||||||
|  |     command shasum -a 256 "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "sha256" && ! nvm_is_alias "sha256"; then | ||||||
|  |     nvm_err 'Computing checksum with sha256 -q' | ||||||
|  |     command sha256 -q "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "gsha256sum" && ! nvm_is_alias "gsha256sum"; then | ||||||
|  |     nvm_err 'Computing checksum with gsha256sum' | ||||||
|  |     command gsha256sum "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "openssl" && ! nvm_is_alias "openssl"; then | ||||||
|  |     nvm_err 'Computing checksum with openssl dgst -sha256' | ||||||
|  |     command openssl dgst -sha256 "${FILE}" | rev | command awk '{print $1}' | rev | ||||||
|  |   elif nvm_has "libressl" && ! nvm_is_alias "libressl"; then | ||||||
|  |     nvm_err 'Computing checksum with libressl dgst -sha256' | ||||||
|  |     command libressl dgst -sha256 "${FILE}" | rev | command awk '{print $1}' | rev | ||||||
|  |   elif nvm_has "bssl" && ! nvm_is_alias "bssl"; then | ||||||
|  |     nvm_err 'Computing checksum with bssl sha256sum' | ||||||
|  |     command bssl sha256sum "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "sha1sum" && ! nvm_is_alias "sha1sum"; then | ||||||
|  |     nvm_err 'Computing checksum with sha1sum' | ||||||
|  |     command sha1sum "${FILE}" | command awk '{print $1}' | ||||||
|  |   elif nvm_has "sha1" && ! nvm_is_alias "sha1"; then | ||||||
|  |     nvm_err 'Computing checksum with sha1 -q' | ||||||
|  |     command sha1 -q "${FILE}" | ||||||
|  |   elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then | ||||||
|  |     nvm_err 'Computing checksum with shasum' | ||||||
|  |     command shasum "${FILE}" | command awk '{print $1}' | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | nvm_compare_checksum() { | ||||||
|  |   local FILE | ||||||
|  |   FILE="${1-}" | ||||||
|  |   if [ -z "${FILE}" ]; then | ||||||
|  |     nvm_err 'Provided file to checksum is empty.' | ||||||
|  |     return 4 | ||||||
|  |   elif ! [ -f "${FILE}" ]; then | ||||||
|  |     nvm_err 'Provided file to checksum does not exist.' | ||||||
|  |     return 3 | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   local COMPUTED_SUM | ||||||
|  |   COMPUTED_SUM="$(nvm_compute_checksum "${FILE}")" | ||||||
|  |  | ||||||
|  |   local CHECKSUM | ||||||
|  |   CHECKSUM="${2-}" | ||||||
|  |   if [ -z "${CHECKSUM}" ]; then | ||||||
|  |     nvm_err 'Provided checksum to compare to is empty.' | ||||||
|  |     return 2 | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   if [ -z "${COMPUTED_SUM}" ]; then | ||||||
|  |     nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary | ||||||
|  |     nvm_err 'WARNING: Continuing *without checksum verification*' | ||||||
|  |     return | ||||||
|  |   elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ]; then | ||||||
|  |     nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected." | ||||||
|  |     return 1 | ||||||
|  |   fi | ||||||
|  |   nvm_err 'Checksums matched!' | ||||||
|  | } | ||||||
|  |  | ||||||
|  | nvm_get_checksum() { | ||||||
|  |   local SHASUMS_URL | ||||||
|  |   if [ "$(nvm_get_checksum_alg)" = 'sha-256' ]; then | ||||||
|  |     SHASUMS_URL="${NVM_NODEJS_ORG_MIRROR}/${1}/SHASUMS256.txt" | ||||||
|  |   else | ||||||
|  |     SHASUMS_URL="${NVM_NODEJS_ORG_MIRROR}/${1}/SHASUMS.txt" | ||||||
|  |   fi | ||||||
|  |   nvm_download -L -s "${SHASUMS_URL}" -o - | \ | ||||||
|  |     nvm_grep "${2}.tar.${3}" | \ | ||||||
|  |     command awk '{print $1}' | ||||||
|  | } | ||||||
|  |  | ||||||
| nvm_checksum() { | nvm_checksum() { | ||||||
|   local NVM_CHECKSUM |   local NVM_CHECKSUM | ||||||
|   if [ -z "${3-}" ] || [ "${3-}" = 'sha1' ]; then |   if [ -z "${3-}" ] || [ "${3-}" = 'sha1' ]; then | ||||||
| @@ -2923,7 +3011,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | nvm_grep -v "N/A" | command sed '/^$/d')" | |||||||
|       nvm_echo '0.31.7' |       nvm_echo '0.31.7' | ||||||
|     ;; |     ;; | ||||||
|     "unload" ) |     "unload" ) | ||||||
|       unset -f nvm nvm_print_versions nvm_checksum \ |       unset -f nvm \ | ||||||
|         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_alias \ |         nvm_is_iojs_version nvm_is_alias \ | ||||||
| @@ -2932,7 +3020,8 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | nvm_grep -v "N/A" | command sed '/^$/d')" | |||||||
|         nvm_install_iojs_binary nvm_install_node_binary \ |         nvm_install_iojs_binary nvm_install_node_binary \ | ||||||
|         nvm_install_merged_node_binary nvm_get_mirror \ |         nvm_install_merged_node_binary nvm_get_mirror \ | ||||||
|         nvm_install_node_source nvm_check_file_permissions \ |         nvm_install_node_source nvm_check_file_permissions \ | ||||||
|         nvm_get_checksum_alg \ |         nvm_print_versions nvm_compute_checksum nvm_checksum \ | ||||||
|  |         nvm_get_checksum_alg nvm_get_checksum nvm_compare_checksum \ | ||||||
|         nvm_version nvm_rc_version nvm_match_version \ |         nvm_version nvm_rc_version nvm_match_version \ | ||||||
|         nvm_ensure_default_set nvm_get_arch nvm_get_os \ |         nvm_ensure_default_set nvm_get_arch nvm_get_os \ | ||||||
|         nvm_print_implicit_alias nvm_validate_implicit_alias \ |         nvm_print_implicit_alias nvm_validate_implicit_alias \ | ||||||
| @@ -2956,7 +3045,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | nvm_grep -v "N/A" | command sed '/^$/d')" | |||||||
|         nvm_print_default_alias nvm_print_formatted_alias nvm_resolve_local_alias \ |         nvm_print_default_alias nvm_print_formatted_alias nvm_resolve_local_alias \ | ||||||
|         nvm_sanitize_path nvm_has_colors nvm_process_parameters \ |         nvm_sanitize_path nvm_has_colors nvm_process_parameters \ | ||||||
|         > /dev/null 2>&1 |         > /dev/null 2>&1 | ||||||
|       unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 |       unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1 | ||||||
|     ;; |     ;; | ||||||
|     * ) |     * ) | ||||||
|       >&2 nvm --help |       >&2 nvm --help | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								test/fast/Unit tests/nvm_compare_checksum
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								test/fast/Unit tests/nvm_compare_checksum
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | cleanup () { | ||||||
|  |   unset -f nvm_compute_checksum | ||||||
|  | } | ||||||
|  | die () { echo $@ ; cleanup ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | set -ex | ||||||
|  |  | ||||||
|  | nvm_compute_checksum() { | ||||||
|  |   echo | ||||||
|  | } | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Provided file to checksum is empty.' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 4 ] || die "expected to exit with code 4, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum foo 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum foo >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Provided file to checksum does not exist.' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 3 ] || die "expected to exit with code 3, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum ../../../nvm.sh 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Provided checksum to compare to is empty.' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1 ; echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT="Computed checksum of '../../../nvm.sh' is empty. | ||||||
|  | WARNING: Continuing *without checksum verification*" | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | nvm_compute_checksum() { | ||||||
|  |   echo "not checksum: ${1}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT="Checksums do not match: 'not checksum: ../../../nvm.sh' found, 'checksum' expected." | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | nvm_compute_checksum() { | ||||||
|  |   echo checksum | ||||||
|  | } | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compare_checksum ../../../nvm.sh checksum 2>&1 >/dev/null)" | ||||||
|  | EXIT_CODE="$(nvm_compare_checksum ../../../nvm.sh checksum >/dev/null 2>&1; echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Checksums matched!' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 0 ] || die "expected to exit with code 0, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | cleanup | ||||||
							
								
								
									
										23
									
								
								test/fast/Unit tests/nvm_compute_checksum
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								test/fast/Unit tests/nvm_compute_checksum
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | set -ex | ||||||
|  |  | ||||||
|  | die () { echo $@ ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compute_checksum 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compute_checksum >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Provided file to checksum is empty.' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 2 ] || die "expected to exit with code 2, got ${EXIT_CODE}" | ||||||
|  |  | ||||||
|  | set +x | ||||||
|  | OUTPUT="$(nvm_compute_checksum foo 2>&1 >/dev/null || echo)" | ||||||
|  | EXIT_CODE="$(nvm_compute_checksum foo >/dev/null 2>&1 || echo $?)" | ||||||
|  | set -x | ||||||
|  | EXPECTED_OUTPUT='Provided file to checksum does not exist.' | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  | [ "${EXIT_CODE}" = 1 ] || die "expected to exit with code 1, got ${EXIT_CODE}" | ||||||
							
								
								
									
										31
									
								
								test/fast/Unit tests/nvm_get_checksum
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								test/fast/Unit tests/nvm_get_checksum
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | set -ex | ||||||
|  |  | ||||||
|  | cleanup () { | ||||||
|  |   unset -f nvm_download nvm_get_checksum_alg | ||||||
|  | } | ||||||
|  | die () { echo $@ ; cleanup ; exit 1; } | ||||||
|  |  | ||||||
|  | . ../../../nvm.sh | ||||||
|  |  | ||||||
|  | nvm_download() { | ||||||
|  |   echo "ERROR_FAILED_MATCH no_match more fields" | ||||||
|  |   echo "${3} bar.tar.baz more fields" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | nvm_get_checksum_alg() { | ||||||
|  |   echo 'sha-256' | ||||||
|  | } | ||||||
|  | OUTPUT="$(nvm_get_checksum foo bar baz)" | ||||||
|  | EXPECTED_OUTPUT="${NVM_NODEJS_ORG_MIRROR}/foo/SHASUMS256.txt" | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  |  | ||||||
|  | nvm_get_checksum_alg() { | ||||||
|  |   echo 'sha-1' | ||||||
|  | } | ||||||
|  | OUTPUT="$(nvm_get_checksum foo bar baz)" | ||||||
|  | EXPECTED_OUTPUT="${NVM_NODEJS_ORG_MIRROR}/foo/SHASUMS.txt" | ||||||
|  | [ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<" | ||||||
|  |  | ||||||
|  | cleanup | ||||||
		Reference in New Issue
	
	Block a user