diff --git a/nvm.sh b/nvm.sh index e4654ae..d127da3 100644 --- a/nvm.sh +++ b/nvm.sh @@ -792,11 +792,27 @@ nvm() { nvm help return 127 fi - VERSION="$(nvm_version "$2")" - # declare local INSTALLS first, otherwise it doesn't work in zsh + local PROVIDED_VERSION + PROVIDED_VERSION="$2" + + if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ]; then + echo 'Can not copy packages from the current version of node.' >&2 + return 2 + fi + local INSTALLS - INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs) + if [ "$PROVIDED_VERSION" = "system" ]; then + if ! nvm_has_system_node; then + echo 'No system version of node detected.' >&2 + return 3 + fi + INSTALLS=$(nvm deactivate > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs) + else + local VERSION + VERSION="$(nvm_version "$PROVIDED_VERSION")" + INSTALLS=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 | tail -n +2 | \grep -o -e ' [^@]*' | cut -c 2- | \grep -v npm | xargs) + fi echo "$INSTALLS" | xargs npm install -g --quiet ;; diff --git "a/test/slow/nvm copy-packages/Running \"nvm copy-packages $(nvm ls current)\" should error out" "b/test/slow/nvm copy-packages/Running \"nvm copy-packages $(nvm ls current)\" should error out" new file mode 100644 index 0000000..2e0d058 --- /dev/null +++ "b/test/slow/nvm copy-packages/Running \"nvm copy-packages $(nvm ls current)\" should error out" @@ -0,0 +1,12 @@ +#!/bin/sh + +die () { echo $@ ; exit 1; } + +. ../../nvm.sh + +local EXPECTED_MSG="Can not copy packages from the current version of node." +[ "$(nvm use 0.10.28 && nvm copy-packages 0.10.28 2&>1)" = "$EXPECTED_MSG" ] || die '"nvm use 0.10.28 && nvm copy-packages 0.10.28" did not fail with the right message' + +$(nvm use 0.10.28 && nvm copy-packages 0.10.28) +[ $? = 2 ] || die '"nvm use 0.10.28 && nvm copy-packages 0.10.28" did not fail with the right error code' +