A `default-packages` file saved with Windows line endings left a carriage return on every package name, and turned each blank line into a lone `\r` entry, so `npm install -g` was given `rimraf\r` and failed. Strip a trailing `\r` from each line before parsing it, like `.nvmrc` parsing already tolerates. Assisted-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Wei-Lun Li <b84330808@gmail.com>
106 lines
2.4 KiB
Bash
Executable File
106 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
: nvm.sh
|
|
\. ../../../nvm.sh
|
|
|
|
FILE="${NVM_DIR}/default-packages"
|
|
|
|
die () { echo "$@" ; cleanup ; exit 1; }
|
|
setup () {
|
|
if [ -f "${FILE}" ]; then
|
|
ORIG_DEFAULT_PACKAGES=$(cat "${FILE}")
|
|
mkdir -p ./tmp/ ||:
|
|
mv "${FILE}" ./tmp/default-packages ||:
|
|
fi
|
|
touch "${FILE}"
|
|
}
|
|
cleanup () {
|
|
if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then
|
|
rm -rf ./tmp/
|
|
echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}"
|
|
else
|
|
rm "${FILE}"
|
|
fi
|
|
}
|
|
|
|
setup
|
|
|
|
cat > "${FILE}" << EOF
|
|
rimraf
|
|
object-inspect@1.0.2
|
|
|
|
# commented-package
|
|
|
|
stevemao/left-pad
|
|
EOF
|
|
|
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
|
EXPECTED_PKGS='rimraf object-inspect@1.0.2 stevemao/left-pad'
|
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "1: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
|
|
|
cleanup
|
|
|
|
setup
|
|
|
|
cat > "${FILE}" << EOF
|
|
rimraf
|
|
not~a~package~name
|
|
mkdirp
|
|
EOF
|
|
|
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
|
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
|
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "2: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
|
|
|
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
|
|
EOF
|
|
|
|
DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
|
|
EXPECTED_PKGS="Only one package per line is allowed in \`${FILE}\`. Please remove any lines with multiple space-separated values."
|
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
|
|
|
cleanup
|
|
|
|
setup
|
|
|
|
rm -rf "${FILE}"
|
|
|
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
|
EXPECTED_PKGS=''
|
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
|
|
|
touch "${FILE}"
|
|
|
|
cleanup
|
|
|
|
setup
|
|
|
|
printf 'rimraf\r\nobject-inspect@1.0.2\r\n\r\n# commented-package\r\n\r\nstevemao/left-pad\r\n' > "${FILE}"
|
|
|
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
|
EXPECTED_PKGS='rimraf object-inspect@1.0.2 stevemao/left-pad'
|
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "6: expected default packages from a CRLF file >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
|
|
|
cleanup
|