From db19450caafb37734a3302b24ac9fe2cde40638d Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sat, 2 Feb 2019 13:45:11 -0800 Subject: [PATCH] [Fix] `default_packages`: work when the file lacks a trailing newline Fixes #1995. --- nvm.sh | 10 ++++++++-- test/fast/Unit tests/nvm_get_default_packages | 19 +++++++++++++++++-- test/installation_node/default-packages | 8 ++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/nvm.sh b/nvm.sh index bf9a1a3..a1cc7bf 100644 --- a/nvm.sh +++ b/nvm.sh @@ -3495,12 +3495,18 @@ nvm() { } 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 DEFAULT_PACKAGES='' # Read lines from $NVM_DIR/default-packages 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 # Skip empty lines. [ -n "${line-}" ] || continue @@ -3517,7 +3523,7 @@ nvm_get_default_packages() { esac DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} " - done < "${NVM_DIR}/default-packages" + done < "${WORK}/default-packages" echo "${DEFAULT_PACKAGES}" | xargs fi } diff --git a/test/fast/Unit tests/nvm_get_default_packages b/test/fast/Unit tests/nvm_get_default_packages index 115bdf6..75730b0 100755 --- a/test/fast/Unit tests/nvm_get_default_packages +++ b/test/fast/Unit tests/nvm_get_default_packages @@ -52,6 +52,21 @@ cleanup 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 object-inspect @ 1.0.2 rimraf @@ -59,7 +74,7 @@ EOF 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." -[ "${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 @@ -69,7 +84,7 @@ rm -rf $FILE DEFAULT_PKGS="$(nvm_get_default_packages)" 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 diff --git a/test/installation_node/default-packages b/test/installation_node/default-packages index ad08aa5..7b1cfca 100755 --- a/test/installation_node/default-packages +++ b/test/installation_node/default-packages @@ -30,8 +30,11 @@ object-inspect@1.0.2 # commented-package stevemao/left-pad +daytime EOF +printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline + nvm install v6.10.1 2>&1 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 $?" 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 setup