mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +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 | ||||
| } | ||||
|  | ||||
| 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() { | ||||
|   local NVM_CHECKSUM | ||||
|   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' | ||||
|     ;; | ||||
|     "unload" ) | ||||
|       unset -f nvm nvm_print_versions nvm_checksum \ | ||||
|       unset -f nvm \ | ||||
|         nvm_iojs_prefix nvm_node_prefix \ | ||||
|         nvm_add_iojs_prefix nvm_strip_iojs_prefix \ | ||||
|         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_merged_node_binary nvm_get_mirror \ | ||||
|         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_ensure_default_set nvm_get_arch nvm_get_os \ | ||||
|         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_sanitize_path nvm_has_colors nvm_process_parameters \ | ||||
|         > /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 | ||||
|   | ||||
							
								
								
									
										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