[Refactor] add `nvm_get_checksum_binary`; use it in `nvm debug`
diff --git a/nvm.sh b/nvm.sh
index ca41eed..c4a80af 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -1286,32 +1286,47 @@
nvm_echo "${VERSIONS}"
}
-nvm_get_checksum_alg() {
- if nvm_has_non_aliased "sha256sum"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "shasum"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "sha256"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "gsha256sum"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "openssl"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "bssl"; then
- nvm_echo 'sha-256'
- elif nvm_has_non_aliased "sha1sum"; then
- nvm_echo 'sha-1'
- elif nvm_has_non_aliased "sha1"; then
- nvm_echo 'sha-1'
- elif nvm_has_non_aliased "shasum"; then
- nvm_echo 'sha-1'
+nvm_get_checksum_binary() {
+ if nvm_has_non_aliased 'sha256sum'; then
+ nvm_echo 'sha256sum'
+ elif nvm_has_non_aliased 'shasum'; then
+ nvm_echo 'shasum'
+ elif nvm_has_non_aliased 'sha256'; then
+ nvm_echo 'sha256'
+ elif nvm_has_non_aliased 'gsha256sum'; then
+ nvm_echo 'gsha256sum'
+ elif nvm_has_non_aliased 'openssl'; then
+ nvm_echo 'openssl'
+ elif nvm_has_non_aliased 'bssl'; then
+ nvm_echo 'bssl'
+ elif nvm_has_non_aliased 'sha1sum'; then
+ nvm_echo 'sha1sum'
+ elif nvm_has_non_aliased 'sha1'; then
+ nvm_echo 'sha1'
else
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
- nvm_err 'Unaliased sha1sum, sha1, or shasum not found.'
+ nvm_err 'Unaliased sha1sum or sha1 not found.'
return 1
fi
}
+nvm_get_checksum_alg() {
+ local NVM_CHECKSUM_BIN
+ NVM_CHECKSUM_BIN="$(nvm_get_checksum_binary 2>/dev/null)"
+ case "${NVM_CHECKSUM_BIN-}" in
+ sha256sum | shasum | sha256 | gsha256sum | openssl | bssl)
+ nvm_echo 'sha-256'
+ ;;
+ sha1sum | sha1)
+ nvm_echo 'sha-1'
+ ;;
+ *)
+ nvm_get_checksum_binary
+ return $?
+ ;;
+ esac
+}
+
nvm_compute_checksum() {
local FILE
FILE="${1-}"
@@ -1347,9 +1362,6 @@
elif nvm_has_non_aliased "sha1"; then
nvm_err 'Computing checksum with sha1 -q'
command sha1 -q "${FILE}"
- elif nvm_has_non_aliased "shasum"; then
- nvm_err 'Computing checksum with shasum'
- command shasum "${FILE}" | command awk '{print $1}'
fi
}
@@ -2452,6 +2464,7 @@
nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR}'"
nvm_err "shell version: '$(${SHELL} --version | command head -n 1)'"
nvm_err "uname -a: '$(command uname -a | command awk '{$2=""; print}' | command xargs)'"
+ nvm_err "checksum binary: '$(nvm_get_checksum_binary 2>/dev/null)'"
if [ "$(nvm_get_os)" = "darwin" ] && nvm_has sw_vers; then
OS_VERSION="$(sw_vers | command awk '{print $2}' | command xargs)"
elif [ -r "/etc/issue" ]; then
@@ -3558,6 +3571,7 @@
nvm_get_mirror nvm_get_download_slug nvm_download_artifact \
nvm_install_npm_if_needed nvm_use_if_needed nvm_check_file_permissions \
nvm_print_versions nvm_compute_checksum \
+ nvm_get_checksum_binary \
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 \
diff --git a/test/fast/Unit tests/nvm_get_checksum_binary b/test/fast/Unit tests/nvm_get_checksum_binary
new file mode 100755
index 0000000..0de0cd4
--- /dev/null
+++ b/test/fast/Unit tests/nvm_get_checksum_binary
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -ex
+
+die () { echo "$@" ; exit 1; }
+
+set +e # TODO: fix
+\. ../../../nvm.sh
+set -e
+
+BIN="$(nvm_get_checksum_binary)"
+
+case "${BIN-}" in
+ sha256sum | shasum | sha256 | gsha256sum | openssl | bssl | sha1sum | sha1 | shasum)
+ echo "${BIN} found"
+ ;;
+ *)
+ die "sha256sum | shasum | sha256 | gsha256sum | openssl | bssl | sha1sum | sha1 | shasum not found: found ${BIN}"
+ ;;
+esac