Skip to content

Commit 7f6c0c0

Browse files
nmarghettiljharb
authored andcommitted
[Refactor] add nvm_install_binary_extract
1 parent d396181 commit 7f6c0c0

File tree

2 files changed

+109
-23
lines changed

2 files changed

+109
-23
lines changed

nvm.sh

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1858,6 +1858,53 @@ nvm_get_mirror() {
18581858
esac
18591859
}
18601860

1861+
# args: os, prefixed version, version, tarball, extract directory
1862+
nvm_install_binary_extract() {
1863+
if [ "$#" -ne 5 ]; then
1864+
nvm_err 'nvm_install_binary_extract needs 5 parameters'
1865+
return 1
1866+
fi
1867+
1868+
local NVM_OS
1869+
local PREFIXED_VERSION
1870+
local VERSION
1871+
local TARBALL
1872+
local TMPDIR
1873+
NVM_OS="${1}"
1874+
PREFIXED_VERSION="${2}"
1875+
VERSION="${3}"
1876+
TARBALL="${4}"
1877+
TMPDIR="${5}"
1878+
1879+
local VERSION_PATH
1880+
1881+
[ -n "${TMPDIR-}" ] && \
1882+
command mkdir -p "${TMPDIR}" && \
1883+
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1
1884+
1885+
local tar_compression_flag
1886+
tar_compression_flag='z'
1887+
if nvm_supports_xz "${VERSION}"; then
1888+
tar_compression_flag='J'
1889+
fi
1890+
1891+
local tar
1892+
if [ "${NVM_OS}" = 'aix' ]; then
1893+
tar='gtar'
1894+
else
1895+
tar='tar'
1896+
fi
1897+
command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1 || return 1
1898+
1899+
command mkdir -p "${VERSION_PATH}" || return 1
1900+
1901+
command mv "${TMPDIR}/"* "${VERSION_PATH}" || return 1
1902+
1903+
command rm -rf "${TMPDIR}"
1904+
1905+
return 0
1906+
}
1907+
18611908
# args: flavor, type, version, reinstall
18621909
nvm_install_binary() {
18631910
local FLAVOR
@@ -1882,19 +1929,15 @@ nvm_install_binary() {
18821929
local VERSION
18831930
VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")"
18841931

1885-
if [ -z "$(nvm_get_os)" ]; then
1886-
return 2
1887-
fi
1932+
local NVM_OS
1933+
NVM_OS="$(nvm_get_os)"
18881934

1889-
local tar_compression_flag
1890-
tar_compression_flag='z'
1891-
if nvm_supports_xz "${VERSION}"; then
1892-
tar_compression_flag='J'
1935+
if [ -z "${NVM_OS}" ]; then
1936+
return 2
18931937
fi
18941938

18951939
local TARBALL
18961940
local TMPDIR
1897-
local VERSION_PATH
18981941

18991942
local PROGRESS_BAR
19001943
local NODE_OR_IOJS
@@ -1914,21 +1957,8 @@ nvm_install_binary() {
19141957
if [ -f "${TARBALL}" ]; then
19151958
TMPDIR="$(dirname "${TARBALL}")/files"
19161959
fi
1917-
local tar
1918-
tar='tar'
1919-
if [ "${NVM_OS}" = 'aix' ]; then
1920-
tar='gtar'
1921-
fi
1922-
if (
1923-
[ -n "${TMPDIR-}" ] && \
1924-
command mkdir -p "${TMPDIR}" && \
1925-
command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1 && \
1926-
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" && \
1927-
command mkdir -p "${VERSION_PATH}" && \
1928-
command mv "${TMPDIR}/"* "${VERSION_PATH}" && \
1929-
command rm -rf "${TMPDIR}"
1930-
); then
19311960

1961+
if nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
19321962
if [ -n "${ALIAS-}" ]; then
19331963
nvm alias "${ALIAS}" "${provided_version}"
19341964
fi
@@ -3957,7 +3987,7 @@ nvm() {
39573987
nvm_npmrc_bad_news_bears \
39583988
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_format_help_message_colors \
39593989
nvm_echo_with_colors nvm_err_with_colors \
3960-
nvm_get_artifact_compression \
3990+
nvm_get_artifact_compression nvm_install_binary_extract \
39613991
>/dev/null 2>&1
39623992
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
39633993
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/sh
2+
3+
cleanup () {
4+
[ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
5+
[ -d "$NVM_DIR" ] && rm -rf "$NVM_DIR"
6+
unset -f die cleanup test_archi nvm_supports_xz
7+
unset NVM_DIR tmp_dir version archi
8+
}
9+
10+
die () { echo "$@" ; cleanup ; exit 1; }
11+
12+
test_archi(){
13+
local os="$1"
14+
local version="$2"
15+
local archi="$os-$3"
16+
local node="$4"
17+
local ext="$5"
18+
local command="$6"
19+
local command_option="$7"
20+
local node_path="$tmp_dir/node-$version-$archi/$node"
21+
22+
# Create tarball
23+
mkdir -p "$(dirname "$node_path")"
24+
echo "node $version" > "$node_path"
25+
(cd "$tmp_dir" && "$command" "$command_option" "$tmp_dir/node-$version-$archi.$ext" "node-$version-$archi" && rm -rf "$tmp_dir/node-$version-$archi")
26+
[ -f "$tmp_dir/node-$version-$archi.$ext" ] || die "Unable to create fake $ext file"
27+
28+
# Extract it
29+
nvm_install_binary_extract "$os" "$version" "${version:1}" "$tmp_dir/node-$version-$archi.$ext" "$tmp_dir/files"
30+
[ "$(cat "$NVM_DIR/versions/node/$version/bin/node")" = "node $version" ] || die "Unable to extract $ext file"
31+
}
32+
33+
\. ../../../nvm.sh
34+
35+
set -ex
36+
37+
# nvm_install_binary_extract is available
38+
type nvm_install_binary_extract > /dev/null 2>&1 || die 'nvm_install_binary_extract is not available'
39+
40+
NVM_DIR=$(mktemp -d)
41+
tmp_dir=$(mktemp -d)
42+
if [ -z "$NVM_DIR" ] || [ -z "$tmp_dir" ]; then
43+
die 'Unable to create temporary folder'
44+
fi
45+
46+
# Test linux tar.xz
47+
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
48+
49+
nvm_supports_xz(){
50+
return 1
51+
}
52+
53+
# Test linux tar.gz
54+
test_archi 'linux' 'v12.9.0' 'x64' 'bin/node' 'tar.gz' 'tar' '-czf'
55+
56+
cleanup

0 commit comments

Comments
 (0)